这里unique_ptr会不会有内存泄漏

use*_*283 1 c++ memory-leaks c++11

#include<iostream>
#include<memory>
using namespace std;
int main()
{
   unique_ptr<int> p(new int);
   *p = 10;
   cout<<*p<<endl;
   p = NULL;
   if(p)
     cout<<"It's NOT NULL\n";
   else
     cout<<"It's NULL NOW\n";
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

//当我为p分配NULL时,程序完成后,它将删除//有NULL的p.虽然删除NULL不会导致任何问题,但是之前由p //保留的内存不会被释放.我对么 .

Bat*_*eba 6

虽然你应该使用p = nullptr而不是使用内存泄漏p = NULL.这是因为std::unique_ptr重载了nullptr_t类型的赋值运算符:

从标准,效果来看

unique_ptr& operator=(nullptr_t) noexcept;

是打电话reset().而这反过来又释放了任何有针对性的记忆.