小编use*_*463的帖子

如何使用智能指针防止双重对象删除?

我有一个课程,它拥有它的孩子的所有权:

class Child
{
public:
    Child() {}
    ~Child() {}
};

class Parent : public QObject
{
    Q_OBJECT
public:
    explicit Parent(QObject *parent = 0): QObject(parent) {}
    ~Parent()
    {
        qDeleteAll(m_children);
    }
    void addChild(Child *ch)
    {
        m_children.append(ch);
    }    
private:
    QList<Child *> m_children;    
};
Run Code Online (Sandbox Code Playgroud)

Child删除后,Parent使用addChild方法添加到类中的实例将Parent被删除.

以下使用将导致双子女破坏:

int main()
{
    {
        Parent father;
        Child child;
        father.addChild( &child );
    }
    //child is out of scope now and gets destroyed
    //father gets destroyed too
    //father's destructor deletes child AGAIN!
    //crash! …
Run Code Online (Sandbox Code Playgroud)

c++ qt pointers memory-management smart-pointers

-1
推荐指数
1
解决办法
376
查看次数

标签 统计

c++ ×1

memory-management ×1

pointers ×1

qt ×1

smart-pointers ×1