我要问的是,即使已将 nullptr 分配给指针,是否也应删除该指针。
例如,在下面的情况下:
std::string* foo = new std::string ("foo");
foo = nullptr;
在 nullptr 释放之前内存是否被占用,或者我们是否面临内存泄漏?
最佳答案
不,此代码会泄漏您使用 new
分配的对象。
如果一个对象是用new
分配的,它必须用delete
释放。
What I'm asking is if a pointer should be deleted even if nullptr has been assigned to it.
您使用的术语表明您的思考方式有误。您需要删除的不是指针,而是对象。指针只是您的代码引用对象的一种方式。指针变量包含对象的地址。您可以有多个指针变量,它们都引用同一个对象。您没有删除指针,而是删除了对象。
现在,像这样编写释放看起来很奇怪:
delete foo;
天真地,您可能认为这意味着,删除指针 foo。但这并不意味着。这意味着,删除其地址存储在 foo 中的对象。
关于c++ - nullptr 是否释放指针的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26400640/