这里unique_ptr会有内存泄漏吗?

Will there be memory leak in unique_ptr here

本文关键字:内存 泄漏 unique ptr 这里      更新时间:2023-10-16
#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 NULLn";
   else
     cout<<"It's NULL NOWn";
   return 0;
}

由于我将 NULL 分配给 p,当程序完成时,它将删除 p 的//具有 NULL。虽然删除 NULL 不会造成任何问题,但 p//更早的内存不会释放。我说得对吗.

不会有内存泄漏,尽管您应该使用 p = nullptr 而不是 p = NULL 。这是因为std::unique_ptr重载nullptr_t类型的赋值运算符:

从标准来看,效果

unique_ptr& operator=(nullptr_t) noexcept;

就是叫reset().反过来,这又释放了任何指向的记忆。