【问题标题】:WA_DeleteOnClose delete all members?WA_DeleteOnClose 删除所有成员?
【发布时间】:2015-08-27 18:21:06
【问题描述】:

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

情况是这样的:我有一个扩展QMainWindow 的类M,在这个类中我使用了一个堆分配的数组。当窗口 M 关闭并调用析构函数时,我用WA_DeleteOnClose 读到了这一点,每个以 M 作为父级的成员都被删除。

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

【问题讨论】:

    标签: c++ qt5 heap-memory destructor


    【解决方案1】:

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

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

    但更好的是,不要费心自己管理内存,这在 C++11 中是一种糟糕的风格。
    在您的类中使用 QVectorstd::array 而不是原始数组。

    【讨论】:

    • 谢谢!使用 QVector,析构函数会自己做,对吧?
    • 是的,完全正确!这就是所谓的 RAII。
    • 谢谢!对不起,我还有一个问题。 M 的所有孩子都继承了 WA_DeleteOnClose 属性吗?换句话说,我必须在所有孩子中将该属性设置为 true 吗?
    • @Pirro 它不是继承的,不。
    • 哦,好的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-11-03
    • 2015-11-21
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多