导入
简介
本节将介绍一种非常强大的新类型,称为智能指针。让我们开始吧。
智能指针是 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 的循环引用,不增加引用计数 |
智能指针概览
接下来,我们将详细介绍各类智能指针。