QScopedPointer vs parent



我需要对下一个情况进行一些解释。假设我们有下一个代码:

class MyClass : public QObject
{ 
    public:
    MyClass(QObject* parent = nullptr)
    {
        m_member.reset(new QObject(this));
    }
    ~MyClass(){} override;
    private: 
    QScopedPointer< QObject> m_member;
};

我不明白将带有父级的对象传递给 QScopedPointer 是否安全。当对象被父级和智能指针删除两次并导致崩溃时,可能会有任何情况吗?

这是完全安全的。以下是销毁MyClass实例时发生的情况:

  1. MyClass 的析构函数被调用(在您的示例中不执行任何操作(
  2. MyClass的所有成员变量都被销毁。在您的情况下,QScopedPointer 的析构函数被调用,这意味着子QObject被删除。销毁QObject后,该将从其父级的子项列表中删除,因此父级不再尝试删除此QObject
  3. QObject 的析构MyClass函数被调用,并且它看不到要删除的子项

如果没有理由动态分配子成员,您可能还需要考虑按值QObject保留子成员

相关内容

  • 没有找到相关文章

最新更新