Qt完善了C++的内存管理机制
如果指针对象有父对象,那么父对象在被释放时,会自动释放子对象
所以,像一些菜单什么的,不管有多少父子关系,都不用担心释放,只需要一层一层的设置parent就行,QT的类要求构造函数必须要传一个explicit的QObject*指针就是这个意思:
Q_INVOKABLE explicit QObject(QObject *parent=nullptr);
也就是是说,任何new出来的QObject的派生类对象,你构造的时候都要传递一个parent指针,如果你不传,默认接受nullptr,这时候你就要自己去管理了。自己管理的QWidget可以用DeleteOnClose;自己管理的其他的对象,需要自己手动释放。
QT自己会设置parent的场景
QStandardItem不需要设置parent就会自动释放:下面的例子会自动释放
QStandardItemModel需要手动设置parent才会被parent释放:下面的例子因为设置了this作为parent才会被