nai*_*ich 2 c++ object delete-operator
我有一个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包装对象,smartpointer将无法识别基础对象被删除.那是对的吗?
由于delete this(以及我上面的代码)是"危险的",有没有更安全的方法来解决我的问题?