我有一个从套接字连续读取的对象,如下所示:
void CSocketReader::ReadComplete ( )
{
messageProcessor->ResponseReceived ( response );
read ();
}
void CSocketReader::read()
{
socket.read(response);
}
我的问题是,根据响应和协议(protocol),我正在执行 ResponseReceived 方法可能会导致删除 CSocketReader 对象。当 ResponseReceived 方法返回 this 指针指向的对象时,该对象将被删除(但出于某种我不知道的原因,即使在删除后 this 指针也不是 NULL!!)。接下来执行 read 方法,程序在 read 中崩溃。我如何才能可靠地检测到正在对象上执行的方法已被删除。
请帮忙。
最佳答案
this
指针在对象被析构后的值在 C++ 标准中是未定义的,因此 this
不是NULL
- 不需要 C++ 为您将其设置为 NULL
。
如果 messageProcessor
对象破坏了调用它的 CSocketReader
对象,那么您的程序设计有点古怪。至少我会让 ResponseReceived
函数返回一个 bool
,如果它删除了 CSocketReader
则为 true
,这样你就可以:
if (!messageProcessor->ResponseReceived(response)) {
return;
}
立即返回。但即使这样也可能不安全;你不应该以代码可以在被破坏的对象上执行的方式构建你的程序。
关于c++ - 销毁后 C++ 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1477072/