小编nai*_*ich的帖子

我可以使用要删除的对象的回调删除另一个拥有的对象吗?

我有一个class(A)知道什么时候应该删除它.我相信一个对象不能直接删除自己(即,你不能从里面调用析构函数)所以我使用了一个回调.

这是我当前解决方案的伪代码:

class A {
  Owner* owner; // is set in constructor

  A(Owner* ow) : owner(ow) {}
  void willDeleteOurself() {
    owner->deleteObject();
  }
} 

class Owner {
  A* obj;

  Owner() { // e.g. constructor
    obj = new A(this);
  }

  void deleteObject() {
    delete obj;
  }
}
Run Code Online (Sandbox Code Playgroud)

我有一个Owner拥有类对象的类对象A.现在,在某些时候,obj"知道"它应该被删除,并且发生呼叫willDeleteOurself().这段代码似乎有效.

现在,我的问题是:这是一种安全的删除方式 obj吗?

我担心的是,当方法deleteObject返回(到达})时,它会跳回到结尾willDeleteOurself(),但是该方法被调用的对象已被破坏.

当我obj在调用之后没有更多语句引用时,这个构造是否安全owner->deleteObject();

更新:

谢谢你的回答.我在这里简化了一下.我没有A* obj;,但是对象的增强smartpointer(单独,有时在地图中).我想如果我调用delete this …

c++ object delete-operator

2
推荐指数
1
解决办法
705
查看次数

标签 统计

c++ ×1

delete-operator ×1

object ×1