gpt4 book ai didi

c++ - 销毁后 C++ 的行为

转载 作者:太空宇宙 更新时间:2023-11-04 14:38:47 24 4
gpt4 key购买 nike

我有一个从套接字连续读取的对象,如下所示:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com