shared_ptr和unique_ptr释放问题
shared_ptr和unique_ptr均可以采用reset()来进行释放,unique_ptr调用了reset之后就会直接释放掉,shared_ptr则会在所有引用计数变为0的时候才会释放申请的内存。
注意unique_ptr的release()方法,并不会释放资源,只会把unique_ptr置为空指针,原来那个资源可以继续调用
unique_ptr中release和reset实操
reset
int *p1 = nullptr;
void myfun() {
unique_ptr<int> p(new int);
*p = 10;
p1 = p.get();
cout << *p1 << endl;
p.reset();
return;
}
int main() {
cout << p1 << endl;
myfun();
cout << p1 << endl;
cout << *p1 << endl;
return 0;
}
结果:
0
10
0x286823e18b0
-2109858784
在reset之后即便p获取到的那块地址已经被unique_ptr释放了,无法再继续使用
release
int *p1 = nullptr;
void myfun() {
unique_ptr<int> p(new int);
*p = 10;
p1 = p.get();
cout << *p1 << endl;
p.release();
return;
}
int main() {
cout << p1 << endl;
myfun();
cout << p1 << endl;
cout << *p1 << endl;
return 0;
}
结果:文章来源:https://www.toymoban.com/news/detail-631111.html
0
10
0x1bf4a2d18b0
10
调用release只是将智能指针置空,资源并没有进行释放文章来源地址https://www.toymoban.com/news/detail-631111.html
到了这里,关于shared_ptr和unique_ptr主动释放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!