Logo
Section 1 / 5

简介

本节将介绍一种非常强大的新类型,称为智能指针。让我们开始吧。

导入

简介

本节将介绍一种非常强大的新类型,称为智能指针。让我们开始吧。

智能指针是 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_ptrC++11独占资源的所有权,不可拷贝
std::shared_ptrC++11拥有引用计数以管理共享资源,自动维护引用计数,当计数为 0 时释放资源
std::weak_ptrC++11用于打破 std::shared_ptr 的循环引用,不增加引用计数

智能指针概览

接下来,我们将详细介绍各类智能指针。

引用包装器

独占指针