智能指针
智能指针
Beyond智能指针
1.定义
C++中的智能指针是一种用于自动管理动态分配的内存的模板类,它们通过封装原始指针来提供自动的内存管理功能,从而避免了内存泄漏和悬挂指针等问题。C++标准库中提供了几种智能指针类型,其中最常用的是std::unique_ptr
、std::shared_ptr
和std::weak_ptr
。
C++智能指针是在C++11版本中引入的。C++11及以后版本废弃了C++98中的auto_ptr
,并从Boost标准库中引入了shared_ptr
、unique_ptr
、weak_ptr
三种智能指针,以提供更强大和灵活的内存管理机制。
2.std::unique_ptr
- 表示对对象的独占所有权,同一时间内只有一个
std::unique_ptr
可以指向某个给定对象。 - 当
std::unique_ptr
被销毁时,它所指向的对象也会被自动删除。 - 禁止复制构造和赋值操作,但支持移动语义。
1 |
|
3.std::shared_ptr
- 表示对对象的共享所有权,允许多个
std::shared_ptr
实例指向同一个对象。 - 内部维护一个引用计数,用于记录当前有多少个
std::shared_ptr
实例指向该对象。 - 当最后一个指向该对象的
std::shared_ptr
被销毁时,引用计数变为0,对象将被自动删除。 - 支持复制构造和赋值操作,每次操作都会增加或减少引用计数。
1 |
|
4.std::weak_ptr
- 是一种不拥有其所指对象的智能指针,主要用于解决
std::shared_ptr
之间的循环引用问题。 - 不增加对象的引用计数,因此不会影响对象的生命周期。
- 可以通过
lock()
成员函数尝试获取一个指向对象的std::shared_ptr
,如果此时对象仍存在,则返回一个指向该对象的std::shared_ptr
,否则返回一个空的std::shared_ptr
1 | // 示例中省略了完整的类和对象定义,只展示weak_ptr的用途 |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果