导入
简介
本课程将介绍现代 C++ 中的智能指针。
简介
智能指针是C++中最重要的特性之一,它们使我们能够在C++中实现显式的内存管理。除了已弃用的 std::auto_ptr 外,C++ 提供了三种不同的智能指针。这些智能指针定义在头文件 <memory> 中。
首先,有 std::unique_ptr,它表示独占所有权的概念。其次,有 std::shared_ptr,它表示共享所有权的概念。最后是 std::weak_ptr。std::weak_ptr 并不是真正意义上的“智能”指针,因为它接口非常简单,其唯一用途是打破 std::shared_ptr 之间的循环引用。它表示临时所有权的概念。
智能指针遵循 RAII 惯例来管理资源。因此,当智能指针超出作用域时,其所持有的资源会自动释放。
Resource Acquisition Is Initialization(资源获取即初始化),简称 RAII,是C++中一种广泛使用的技术。资源的获取与释放与对象的生命周期绑定在一起。这意味着智能指针的内存是在构造函数中分配,在析构函数中释放。我们可以在C++中使用这一技术,因为当对象超出作用域时,其析构函数会被自动调用。
各种类型的智能指针
| 名称 | 标准 | 描述 |
|---|---|---|
std::auto_ptr(已弃用) | C++98 | 独占拥有资源。复制时会转移资源所有权。 |
std::unique_ptr | C++11 | 独占拥有资源。不可被复制。 |
std::shared_ptr | C++11 | 为共享资源维护引用计数。自动管理引用计数。当引用计数为0时删除资源。 |
std::weak_ptr | C++11 | 用于打破 std::shared_ptr 之间的循环引用。不修改引用计数。 |
现在,让我们继续了解各种类型的智能指针。