【问题标题】:Will there be memory leak in unique_ptr here这里的unique_ptr会不会有内存泄漏
【发布时间】:2016-08-01 06:51:50
【问题描述】:
#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;
}

// 当我将 NULL 分配给 p 时,当程序完成时,它将删除 // 具有 NULL 的 p。虽然删除 NULL 不会导致任何问题,但 p //earlier 持有的内存不会被释放。我对么 。

【问题讨论】:

  • 当您提问时,输入您用于代码的语言的标签。你的问题没有 c++ 标签,c++ 开发人员不会看到你回答你的问题。
  • 仅供参考,将其编码为使用您可以见证其中的破坏的东西,而不是简单的int,例如您转储到标准输出的简单类类型析构函数,可能会把你推到正确的道路上。

标签: c++ c++11 memory-leaks


【解决方案1】:

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

从标准看,效果

unique_ptr&amp; operator=(nullptr_t) noexcept;

是打电话给reset()。反过来,这会释放所有指向的内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多