【发布时间】:2023-01-24 22:10:49
【问题描述】:
我想知道这是否是将指针重置为 null 的好方法。我想是的,但我想确定。 我使用基本的 C++(不是 C++ 11;C++ 14,...)。
例子:
MyClass * myClass = new MyClass();
delete myClass;
myClass = NULL;
我以为删除重置了指针,但实际上没有。 如果指针在“新建”之后的值为 0xb861708,那么在“删除”之后该值始终为 0xb861708。 删除释放内存但不重置指针。因此,操作系统可以使用释放的内存,但指针仍指向内存区域。 如果删除后我们这样做myClass->SomeFunction(),它使程序崩溃(SIGSEGV)或使操作系统崩溃。
这就是为什么我曾经在删除后重置指针但想知道这是否是正确的方法。
非常感谢。
乔斯林
删除后以正确的方式重置指针。
【问题讨论】:
-
使用
std::unique_ptr而不是低级内存原语,您就不必费心了。 -
是的,这没关系。在 C++11 或更新版本中将使用
nullptr而不是NULL。你为什么要在 2023 年限制自己使用 C++98? -
使用
myClass = nullptr;而不是myClass = NULL;。我不确定你的意思基础C++. C++ 标准目前是 C++20,很快就会是 C++23。 -
曾经有一段时间人们在做类似
#define SAFE_DELETE(x) delete x; x = NULL;的事情。以前不喜欢,现在更不喜欢。 -
如果在删除之后我们执行 myClass->SomeFunction()-- 那么那是你程序中的错误。弄清楚为什么您的程序会使用无效的对象指针调用函数的路径可能更明智。如果您的代码在整个代码库中变成了很多行
if (ptr == nullptr) do something;,那么这意味着某处的设计和/或逻辑存在缺陷。