好的,我想使用一些Object
及其代理人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 ++中起作用 - 从盒子里开始?
我的问题是:当我在Object
中运行一个方法时,我从另一个对象(DelegateItself
)中调用另一个方法并删除Object
。堆栈将是:
所以在析构函数方法结束后deleteMe
方法也结束了(一段时间后)。但是crazyMethod
不存在的对象会发生什么?如果我尝试使用变量Object::a
,我将有可能获得垃圾而不是实际值(数据将无效)[希望我理解C ++逻辑]。如果我试图在Object
中调用另一种方法,我可能会崩溃[希望如此]。但如果没有后续方法会被调用,保证会正确结束crazyMethod
吗?