C++11 std::shared_ptr指针
2023-06-06
9
0
std::shared_ptr形如其名,允许多个该智能指针共享地拥有同一堆分配对象的内存指针。
与std::unique_ptr不同的时,为了共享地拥有同一堆分配对象的内存指针,std::shared_ptr内部采用引用计数的方式来实现,所以一旦某一个std::shared_ptr反映针放弃了“所有权”(失效),其它的shared_ptr对对像内存的引用并不会受到影响。
如以下代码:
#include<memory>
using namespace std;
void fun(std::shared_ptr<int> ptr)
{
}
int _tmain(int argc, _TCHAR* argv[])
{
std::shared_ptr<int> p1(new int(10));
std::shared_ptr<int> p2 = p1;
fun(p2);
return 0;
}
在初始化时,p1引用计数加1 ,p2赋值初再次加1,按“值”传给fun函数时,再次引用加1。
shared_ptr的实现类似于comm接口,当引用计数为0时,才真正的删除内存。