c++中unique_ptr与share_ptr、weak_ptr的一个经典问题就是release,release函数表示只释放指针,但是内存并不释放,
即release后,内存仍被占用,且其他占用该内存的指针仍然可以正常使用。本人写了如下代码进行解释:
#include<iostream>
#include <memory>
void foo(int *p) {
std::cout << *p << std::endl;
std::unique_ptr<int> up;
up.reset(p);//裸指针转成共享指针
up.release();//共享指针释放,内存不释放
up = nullptr;
std::cout << *p << std::endl;
}
void main() {
int *p = new int(1111);
*p = 100;
foo(p);
std::cout << *p << std::endl;
int m=foo(p,1);
std::cout << *p << std::endl;
delete p;
}
上述代码中up释放后,main函数中p仍然不受影响。