【发布时间】:2022-01-21 10:44:35
【问题描述】:
int *a;
if (true)
*a = 2;
else
*a = 3;
如您所见,a 不是动态分配的指针。我应该在退出之前将其分配给nullptr 吗? unique_ptr 会自动为我做吗? a 指向的内存指针呢?如果我在 a 超出范围之前为空,会导致内存泄漏吗?
【问题讨论】:
-
那个代码是 UB,
a没有指向任何东西。 -
你想达到什么目标?您提议的更改以何种方式影响目标?为什么要使用
unique_ptr?这和你的目标有关吗?内存泄漏是如何发生的?这些都是或多或少独立的问题,您可以独立研究。不过,其中大部分都是常见问题解答,因此请从这里开始。 -
您的代码不需要您的编译器将其转换为任何有效的东西(未定义的行为)。将
nullptr分配给指针在某些情况下可能有意义在使用delete运算符 以允许编译器警告您在某些情况下意外访问已删除的对象,或者至少使代码崩溃,而不是对内存访问的影响一无所知,但std::unique_ptr不会“帮助”任何相关的事情;std::unique_ptr只是明确所有权并确保在其拥有的对象上调用delete运算符... -
顺便说一句:内存泄漏,即使设置为 null:
void f() { int* p = new int; p = nullptr; }即使未设置为 null,也没有内存泄漏:void f() { int* p = new int; delete p; } -
a指向的内存指针呢? 由于a未初始化,它并不指向int.你的编译器应该已经警告你了。打开编译器警告。修复警告。
标签: c++ pointers unique-ptr