我在Qt5的WA_DeleteOnClose
属性方面遇到了麻烦。
这种情况:我有一个扩展QMainWindow
的类M,在这个类中我使用堆分配的数组。当窗口M关闭时,我用WA_DeleteOnClose
读取,并且调用了析构函数,删除了M为父的每个成员。
我的问题是:关于阵列的内容是什么?我知道每个堆栈分配的成员在调用析构函数时都会被释放,我知道,在正常情况下,我必须在我的数组上调用delete []。但在这些条件下呢?如果我不使用delete [],由于WA_DeleteOnClose
属性,我的数组是否已取消分配?
另一个问题。 WA_DeleteOnClose属性是否由所有M的孩子继承?换句话说,我是否必须在所有儿童中将该属性设置为true?
答案 0 :(得分:0)
Qt只会打电话给你的析构函数,它不会删除你班级中的每个成员!
如果您的类的析构函数中有delete[] myArray
,则您的数组将被正确删除。
如果你没有在析构函数中delete[]
你的数组,它就会泄漏。
但更好的是,不要费心自己管理内存,这在C ++ 11中风格很差
在您的班级中使用QVector
或std::array
代替原始数组。