首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QScopedPointer对父母

QScopedPointer对父母
EN

Stack Overflow用户
提问于 2018-03-01 20:27:28
回答 1查看 433关注 0票数 0

我需要一些关于下一个情况的解释。假设我们有下一个代码:

代码语言:javascript
复制
class MyClass : public QObject
{ 
    public:
    MyClass(QObject* parent = nullptr)
    {
        m_member.reset(new QObject(this));
    }
    ~MyClass(){} override;
    private: 
    QScopedPointer< QObject> m_member;
};

我无法理解将带有父对象的对象传递给QScopedPointer是否安全。当对象被父对象和智能指针删除两次并导致崩溃时,是否存在这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-01 21:02:11

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

  1. 调用MyClass的析构函数(在您的示例中不做任何操作)
  2. MyClass的所有成员变量都被破坏。在您的例子中,QScopedPointer的析构函数被调用,这意味着子QObject被删除。当QObject被销毁时,它就是从其父母的子女名单中删除,所以父程序不再尝试删除这个QObject
  3. QObjectMyClass实例的析构函数被调用,它看不到要删除的子程序。

如果没有理由动态分配子成员QObject,也可以考虑按值保存它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49058172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档