据我理解,以下代码是创建QObject的完美方法。
我正在阅读到 "父对象拥有新创建的对象并最终调用delete" 或者 "复合对象拥有子对象,所以只要完成了父子关系,你就可以确保当父对象销毁时,子QObject也会被销毁"(来自如何删除Qt对象?最佳的存储QObjects方法是什么?)。请问有人能告诉我Qt如何"拥有"一个QObject吗?更准确地说:对于Qt(它是一个库,有自己的运行时),如何对我用不同运行时创建的指针调用operator delete?为什么不会崩溃?
编辑:
我加上这个参考资料,因为整个问题的重点就在这里:
"运行在DLL中的代码可能正在使用不同的C++运行时库,这意味着堆的布局将是不同的。DLL可能在完全不同的堆上运行。
在主程序上调用delete一个由DLL分配的指针(反之亦然)将导致(在最好情况下)立即崩溃或(在最坏情况下)内存损坏,需要一段时间来跟踪。" (来自C++在不同库之间混合使用new/delete?)
QLabel *label = new QLabel("label");
QWidget window;
label->setParent(&window);
window.show();
我正在阅读到 "父对象拥有新创建的对象并最终调用delete" 或者 "复合对象拥有子对象,所以只要完成了父子关系,你就可以确保当父对象销毁时,子QObject也会被销毁"(来自如何删除Qt对象?最佳的存储QObjects方法是什么?)。请问有人能告诉我Qt如何"拥有"一个QObject吗?更准确地说:对于Qt(它是一个库,有自己的运行时),如何对我用不同运行时创建的指针调用operator delete?为什么不会崩溃?
编辑:
我加上这个参考资料,因为整个问题的重点就在这里:
"运行在DLL中的代码可能正在使用不同的C++运行时库,这意味着堆的布局将是不同的。DLL可能在完全不同的堆上运行。
在主程序上调用delete一个由DLL分配的指针(反之亦然)将导致(在最好情况下)立即崩溃或(在最坏情况下)内存损坏,需要一段时间来跟踪。" (来自C++在不同库之间混合使用new/delete?)
delete label;
,就像你的代码一样可以执行。没有区别,也没有魔法涉及。 - Bo Persson