c ++唯一指针:内存泄漏

Nis*_*mar 4 c++ memory-leaks smart-pointers unique-ptr c++11

我对独特指针的释放方法感到困惑.这是我的示例程序.

class Test
{
public:
    Test(){std::cout << "ctor" << std::endl;}
    ~Test(){std::cout << "dtor" << std::endl;}
};

int main() {
    std::unique_ptr<Test> ptr(new Test());
    ptr.release(); // memory leak
    //ptr.reset(); // this is ok but not necessary
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

ctor
Run Code Online (Sandbox Code Playgroud)

因为它不打印dtor我假设它不调用析构函数Test会导致内存泄漏.吗?

Meh*_*dad 11

这个词的release意思是"释放对呼叫者的所有权 ".所以不,析构函数不会被它调用.

如果要显式调用析构函数,则必须手动delete执行released指针,或者只调用reset,这是执行此操作的首选方法.
如果您不需要明确地执行此操作,那么您可以保留它并且它将自动得到处理.

  • dream_machine可能正在思考COM,其中`release()`意味着减少引用计数并可能破坏对象. (2认同)
  • 实际上我对释放单词感到困惑,这通常用于释放资源:) (2认同)
  • 别忘了unique_ptr是一个智能指针.如果你不做任何事情,当它超出范围时,它也会被破坏并释放内存. (2认同)