看到资料说Qt对内存管理进行了优化,主要是说对象创建时如果指明了其父对象,那么在父对象析构时释放子对象。如果没有父对象,应该由程序员delete释放内存。例如:
//addressbook.h
class AddressBook : public QWidget
{
Q_OBJECT
public:
AddressBook(QWidget * parent = 0);
}
//addressbook.cpp
AddressBook::AddressBook(QWidget* parent):QWidget(parent)
{
QLabel * nameLabel = new QLabel(tr("Name:"));
QGridLayout* mainLayout = new QGridLayout;
mainLayout->addWidget(nameLabel, 0, 0);
setLayout(mainLayout);
mainLayout->addWidget(nameLine, 0, 1);
}
//main.cpp
int main(int argc, char **argv)
{
QApplication app(argc, argv);
AddressBook *addressBook = new AddressBook;
addressBook->show();
return app.exec();
}
我的理解是:
1. 在main.cpp中虽然为AddressBook开辟了内存,但在构造AddressBook实例时,指明了其父对象是空,那么addressBook就是这个应用app的顶级窗口,在app.exec()销毁退出的时候,就自动delete了addressBook,释放了内存。
我的疑问是在AddressBook构造函数中的代码,nameLabel和mainLayout在new的时候并没有指明其父对象是谁,那么它们两个是在什么时候释放的呢?