C++11 智能指针std::shared_ptr/std::unique_ptr/std::weak_ptr
来源:互联网 发布:数学建模中的十大算法 编辑:程序博客网 时间:2024/05/22 02:28
std::shared_ptr
std::shared_ptr 是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显示的调用 delete,当引用计数变为零的时候就会将对象自动删除。
std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数,并通过get_count()来查看一个对象的引用计数。
auto pointer = std::make_shared<int>(10);auto pointer2 = pointer; // 引用计数+1auto pointer3 = pointer; // 引用计数+1int *p = pointer.get(); // 这样不会增加引用计数std::cout << "pointer.use_count() = " << pointer.use_count() << std::endl; // 3std::cout << "pointer2.use_count() = " << pointer2.use_count() << std::endl; // 3std::cout << "pointer3.use_count() = " << pointer3.use_count() << std::endl; // 3pointer2.reset();std::cout << "reset pointer2:" << std::endl;std::cout << "pointer.use_count() = " << pointer.use_count() << std::endl; // 2std::cout << "pointer2.use_count() = " << pointer2.use_count() << std::endl; // 0, pointer2 已 resetstd::cout << "pointer3.use_count() = " << pointer3.use_count() << std::endl; // 2pointer3.reset();std::cout << "reset pointer3:" << std::endl;std::cout << "pointer.use_count() = " << pointer.use_count() << std::endl; // 1std::cout << "pointer2.use_count() = " << pointer2.use_count() << std::endl; // 0std::cout << "pointer3.use_count() = " << pointer3.use_count() << std::endl; // 0, pointer3 已 reset
std::unique_ptr
std::unique_ptr 是一种独占的智能指针,它禁止其他智能指针与其共享同一个对象,从而保证了代码的安全
#include <iostream>#include <memory>struct Foo { Foo() { std::cout << "Foo::Foo" << std::endl; } ~Foo() { std::cout << "Foo::~Foo" << std::endl; } void foo() { std::cout << "Foo::foo" << std::endl; }};void f(const Foo &) { std::cout << "f(const Foo&)" << std::endl;}int main() { std::unique_ptr<Foo> p1(std::make_unique<Foo>()); // p1 不空, 输出 if (p1) p1->foo(); { std::unique_ptr<Foo> p2(std::move(p1)); // p2 不空, 输出 f(*p2); // p2 不空, 输出 if(p2) p2->foo(); // p1 为空, 无输出 if(p1) p1->foo(); p1 = std::move(p2); // p2 为空, 无输出 if(p2) p2->foo(); std::cout << "p2 被销毁" << std::endl; } // p1 不空, 输出 if (p1) p1->foo(); // Foo 的实例会在离开作用域时被销毁}
std::weak_ptr
阅读全文
0 0
- C++11 智能指针std::shared_ptr/std::unique_ptr/std::weak_ptr
- 引用计数智能指针std::tr1::shared_ptr与weak_ptr
- C++11引入智能指针std::unique_ptr
- C++11智能指针之std::unique_ptr
- std::shared_ptr 和 std::weak_ptr
- 关于std:auto_ptr std:shared_ptr std:unique_ptr
- C++11智能指针之std::shared_ptr
- 【C++】智能指针auto_ptr/unique_ptr/shared_ptr/weak_ptr!!!
- std::unique_ptr和std::shared_ptr的用法
- C++11 智能指针 unique_ptr shared_ptr weak_ptr
- 智能指针:从std::auto_ptr到std::unique_ptr
- c++中的std::shared_ptr和std::weak_ptr
- std::tr1::shared_ptr、std::tr1::weak_ptr及std::tr1::enable_shared_from_this
- 几种智能指针的比较(std::auto_ptr、boost::scoped_ptr、boost::shared_ptr、boost::weak_ptr)
- 智能指针 std::auto_ptr 和 shared_ptr
- 智能指针 std::auto_ptr 和 shared_ptr
- 智能指针 std::auto_ptr 和 shared_ptr
- C++11 智能指针之 std::shared_ptr 初级学习
- [PTA MOOC] 自测-5 Shuffling Machine(20 分)
- 对于Python中@property的理解和使用
- H264详解之打包形式
- 并查集例题:亲戚
- 研一下学期总结
- C++11 智能指针std::shared_ptr/std::unique_ptr/std::weak_ptr
- sublime快捷键
- BZOJ2201彩色圆期望DP
- appium python-client代码分析(二)
- Flarum 源码安装错误
- HTML的语法
- 减少域名DNS解析时间将网页加载速度提升新层次-DNS缓存/预读取/拆分域名
- Oracle 分组查询
- 根据hash统计数组中各个元素的数量