大纲
智能指针
智能指针的概念介绍
在 C++ 中,智能指针的类型有以下几种:
- (1) 带引用计数的智能指针:
shared_ptr - (2) 不带引用计数的智能指针:
auto_ptr、scoped_ptr、unique_ptr - (3) 特殊的智能指针:
weak_ptr(不增加引用计数,可以用于避免 shared_ptr 发生循环引用)
| 智能指针 | C++ 标准 | 所有权 | 带引用计数 | 适用场景 | 核心特性 |
|---|
auto_ptr | C++ 98 | 独占(拷贝时转移) | 否 | ⚠ 已废弃,建议改用 unique_ptr | 独占所有权,在复制或赋值时会转移所有权,导致原指针变为空(nullptr) |
scoped_ptr | Boost | 独占 | 否 | 生命周期受限于作用域,适用于简单的场景,避免资源泄漏 | 独占所有权,不可复制或赋值,不支持移动语义,即不可以使用 std::move() 函数转移所有权 |
unique_ptr | C++ 11 | 独占 | 否 | 资源独占,生命周期明确 | 独占所有权,不可复制(拷贝构造和赋值),但可以移动(移动构造和移动赋值),即支持使用 std::move() 函数转移所有权 |
shared_ptr | C++ 11 | 共享 | 是 | 资源共享,生命周期不固定 | 共享所有权(允许多个智能指针管理同一个资源) |
weak_ptr | C++ 11 | 观察 shared_ptr | 否 | 避免 shared_ptr 发生循环引用 | 不增加引用计数,用于避免 shared_ptr 发生循环引用,可以通过 lock() 函数转换为 shared_ptr |
unique_ptr 对象的简介
unique_ptr 是 C++ 11 提供的用于防止内存泄漏的智能指针中的一种实现,独享被管理对象指针所有权的智能指针。unique_ptr 对象包装了一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中删除关联的原始指针。unique_ptr 实现了 -> 和 * 运算符的重载,因此它可以像普通指针一样使用。