c++ - nullptr 是否释放指针的内存?

标签 c++ pointers nullptr

我要问的是,即使已将 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/

相关文章:

c - C 编程中的*指针为 nullptr* 错误

c++ - #include "SDL_image.h"搞乱了我的编译

c++ - 如何打印数组的内容而不在堆栈上创建任何内容?

c++ - 谁负责为线程句柄调用 CloseHandle()

c++ - 从对象及其成员的地址获取指向成员的指针

c++ - 为什么 'nullptr' 命名空间中没有 'std'?

c - VS2019 C6011 错误取消引用空指针 'NewNode'

c++ - 它对现代 C++ 中字符串的初始化方式有影响吗?

c++ - C++ 中 const 声明的区别

c++ - 删除多个列表指向的数据?