WA_DeleteOnClose删除所有成员?

WA_DeleteOnClose delete all members?

我遇到了 Qt5 的 WA_DeleteOnClose 属性的问题。

情况是这样的:我有一个扩展 QMainWindow 的 class M,在这个 class 中我使用了一个 heap-allocated 数组。我读到 WA_DeleteOnClose 当 window M 关闭时,析构函数被调用,每个 M 为 parent 的成员都被删除。

我的问题是:数组是什么?我知道每个 stack-allocated 成员在调用析构函数时都会被释放,而且我知道,在正常情况下,我必须在我的数组上调用 delete[]。但是在这些条件下?如果我不使用 delete[],我的数组是否会因为 WA_DeleteOnClose 属性而被释放? 另一个问题。 WA_DeleteOnClose 属性是否被 M 的所有孩子继承?换句话说,我是否必须在所有子项中将该属性设置为 true?

Qt 只会调用您的析构函数,它不会去删除您 class 本身的每个成员!
如果你的 class 的析构函数中有 delete[] myArray,你的数组将被正确删除。

如果你不在析构函数中 delete[] 你的数组,它将泄漏。

但更好的是,不要费心自己管理内存,这是 C++11 中的糟糕风格。
在 class.

中使用 QVectorstd::array 而不是原始数组