你是对的,现在你正在泄漏一个实例MainWindow
和一个breadData
.
例如QObject
,最简单的做法是使用内置的内存管理。使您QObject
的 s 归其所有QApplication
,它们将在QApplication
销毁时被删除。
对于其他对象,使用智能指针 - 无论如何,你应该这样做!
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget g; // dummy, just to demonstrate ownership - will delete children
// upon leaving the scope
// 1. For QObjects/QWidgets
// 1a. use QObject/QWidget ownership
MainWindow *w = new MainWindow(&g);
// 1b. or use a smart pointer
QScopedPointer<MainWindow> w(new MainWindow);
// 2. For any other class: use smart pointers
QScopedPointer<breadData> dat(new breadData("audit.dat"));
//link main window with bread data
w->_link(dat);
//show main window
w->show();
//execute loop
return a.exec();
}
顺便说一句,breadData
当读取文件或解析文件失败时,该构造函数最好抛出异常。否则你会得到一个“无效”的对象,祝你好运,确保应用程序的其余部分知道如何处理它。