shared_ptr和unique_ptr、weak_ptr的区别
时间: 2023-09-14 20:02:46 浏览: 130
C++ unique_ptr weak_ptr shared_ptr auto_ptr智能指针.doc
5星 · 资源好评率100%
shared_ptr、unique_ptr和weak_ptr是C++中智能指针的三种常见类型。
1. shared_ptr:是一种引用计数智能指针。多个shared_ptr可以共享同一个对象,通过内部的引用计数来管理对象的生命周期。当最后一个shared_ptr被销毁时,对象会被自动释放。可以使用make_shared函数创建shared_ptr。
2. unique_ptr:是一种独占所有权的智能指针。只能有一个unique_ptr指向一个对象,不能进行复制或共享所有权。当unique_ptr被销毁时,对象也会被自动释放。可以使用make_unique函数创建unique_ptr。
3. weak_ptr:是一种弱引用智能指针。它指向一个由shared_ptr管理的对象,但并不增加引用计数。当最后一个shared_ptr被销毁时,即使还有weak_ptr指向对象,对象也会被释放。可以通过lock()方法获取一个可用的shared_ptr来操作对象。
区别:
- 所有三种智能指针都提供了自动释放内存的功能,避免了手动调用delete。
- shared_ptr适用于多个指针共享同一个对象的场景,它维护一个引用计数来跟踪对象的生命周期。
- unique_ptr适用于独占所有权的场景,只能有一个unique_ptr指向一个对象。
- weak_ptr用于解决shared_ptr的循环引用问题,它可以被shared_ptr或者expired成空指针的lock()方法获取一个可用的shared_ptr。
总结:选择哪种智能指针取决于具体的需求。如果需要共享所有权,可以使用shared_ptr;如果需要独占所有权,可以使用unique_ptr;如果需要解决循环引用问题,可以使用weak_ptr。
阅读全文