我有一个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 …