1. 语法
std::shared_ptr<类型> 变量名称{};
std::shared_ptr<int> ptrA{};
std::shared_ptr<int> ptrB{std::make_shared<int>(5)};
- 注意:
std::make_shared
不支持数组。
std::shared_ptr<int[]> ptrC{ new int[5]{1, 2, 3, 4, 5} };
2. 特性
- 可以有多个
std::shared_ptr
指向同一地址;
std::shared_ptr<int> ptrC{ ptrA };
- 同一地址下只有当最后一个
std::shared_ptr
释放的时候,才会释放其所占用的内存空间;
3. 用法
3.1. .use_count();
语法:
long std::shared_ptr.use_count();
释义:
std::shared_ptr
会记录当前地址有多少个智能指针调用。 use_count();
会返回当前指针共有多少个对象调用。
代码:
std::shared_ptr<int> ptrA{std::make_shared<int>(5)};
std::shared_ptr<int> ptrB{ ptrA };
std::shared_ptr<int> ptrC{ ptrA };
std::cout << ptrA.use_count() << std::endl; // 3
3.2. unique();
(C++17已废弃)
语法:
bool std::shared_ptr.unique();
释义:
unique()
将会返回一个bool
值,如果当前智能指针是唯一拥有该指针的,那么返回true
,否则返回哈false
。
代码:
std::shared_ptr<int> ptrA{std::make_shared<int>(5)};
std::shared_ptr<int> ptrB{ ptrA };
std::shared_ptr<int> ptrC{ ptrA };
std::cout << ptrA.unique() << std::endl; // false
3.3. reset();
语法:
std::shared_ptr.reset();
释义:
reset()
会将当前共享指针设置为nullptr
,同时如果当前智能指针是最后一个拥有该指针的对象,那么将会释放内存。
代码:
std::shared_ptr<int> ptrA{std::make_shared<int>(5)};
std::shared_ptr<int> ptrB{ ptrA };
std::shared_ptr<int> ptrC{ ptrA };
ptrB.rest();
std::cout << ptrA << std::endl; // 010FA41C
std::cout << ptrB << std::endl; // 00000000
std::cout << ptrC << std::endl; // 010FA41C
版权声明:本文为Nine_Yao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。