c++ unique pointer: memory leak

c++, c++11, memory-leaks, smart-pointers, unique-ptr

Solution

The word `release` means "release ownership to the caller". So no, the destructor isn't called by it.

If you want to call the destructor explicitly then you have to either `delete` the `release`d pointer manually, or just call `reset`, which is the preferred way to do it. If you don't need to do this explicitly then you can just leave it and it'll get taken care of automatically.

Problem

I am little confused about release method of unique pointer. Here is my sample program. ``` 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; } ``` Output: ``` ctor ``` Since it is not printing `dtor` i am assuming it is not calling destructor of `Test` which will lead to memory leak. Is it?

Original source