release 只会放弃所有权,不会释放内存资源;
reset 既放弃所有权,还会释放内存资源(调用删除器)。如果有参数,还会接管参数对应的新资源。
#include <iostream> #include <memory> using namespace std; class A { public: A() { cout << "Create A object" << endl; } ~A() { cout << "Destroy A object" << endl; } }; int main() { unique_ptr<A> p(new A); p.release(); return 0; }
运行结果:
Create A object
可以看到,并没有调用class A的析构函数。
注意到unique_ptr
如果想要释放内存,请调用reset
。