我有一个从套接字读取的对象,如下所示:
void CSocketReader::ReadComplete ( )
{
messageProcessor->ResponseReceived ( response );
read ();
}
void CSocketReader::read()
{
socket.read(response);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,根据响应和我正在执行的协议,ResponseReceived方法可能导致删除CSocketReader对象.当ResponseReceived方法返回该指针所指向的对象时,该指针将被删除(但由于某些原因我不知道这个指针即使被删除后也不是NULL!).接下来执行read方法,程序在读取内崩溃.如何可靠地检测到已删除对象上正在执行的方法.
请帮忙.
该值什么this指针已破坏对象的C++标准是不明确之后,所以它不应该是一个惊喜,this是不是NULL- C++并不需要将其设置为NULL你.
如果messageProcessor对象破坏了CSocketReader调用它的对象,那么程序的设计有点令人讨厌.至少我会让ResponseReceived函数例如返回一个bool,true如果它已经删除了CSocketReader,那么你可以这样做:
if (!messageProcessor->ResponseReceived(response)) {
return;
}
Run Code Online (Sandbox Code Playgroud)
马上回来.但即使这可能也不安全; 您不应该以可以在被破坏的对象上执行代码的方式构建程序.
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |