可能重复:
安全delete this
吗?
好的,我想使用 someObject
和它的 delegate ObjectDelegate
。
这是示例代码:
class ObjectDelegate;
class Object {
private:
int a;
ObjectDelegate *delegate;
void crazyMethod();
public:
Object();
~Object();
void setDelegate(ObjectDelegate*);
};
Object::Object() {
delegate = NULL;
a = 9001;
std::cout << "Object Constructor";
}
Object::~Object() {
std::cout << "Object Destructor";
}
void Object::crazyMethod() {
if(delegate != NULL) {
delegate->deleteMe(this);
}
}
//-----
class ObjectDelegate {
public:
virtual void deleteMe(Object*) = 0;
};
//------
class DelegateItself : public ObjectDelegate {
void deleteMe(Object*);
};
void DelegateItself::deleteMe(Object *object) {
delete object;
}
我经常在 Objective-C 和 Java 中使用这种方法,但它如何在 C++-from-the-box 中工作?
我的问题是:当我在其中运行一个方法时,Object
我从它调用另一个对象()中的另一个方法DelegateItself
并删除Object
. 堆栈将是:
- 对象::~对象()
- 委托本身::deleteMe()
- 对象::crazyMethod()
所以在析构方法结束deleteMe
后方法也结束(一段时间后)。crazyMethod
但是不存在的对象会发生什么?如果我尝试使用变量Object::a
,我将有可能获得垃圾而不是实际值(数据将无效)[希望我理解 C++ 逻辑]。如果我尝试在其中调用另一种方法,Object
我可能会崩溃[希望如此]。但是如果没有后续方法被调用,是否可以保证正确结束?crazyMethod