第5章 应用标准智能指针

C++ 强调值语义编程。默认情况下,代码直接操作对象本身,而非对象的间接引用(指针或引用)。当然,也允许间接访问对象,不过需要特殊的语法。第4章通过析构函数和 RAII 机制,探讨了资源管理与对象生命周期的关联,展现了 C++ 的核心优势:所有资源(包括内存)都能通过语言本身的机制隐式管理。

C++ 允许在代码中使用原始指针,但并不鼓励这样做。恰恰相反,原始指针是一种底层工具,效率极高但易误用,且很难直接从代码中推断出它对所指对象的所有权责任。从多年前(现已移除的)auto_ptr<T> 开始,C++ 社区就一直致力于通过提供语义明确、不易出错的类型(如标准容器和智能指针),对原始指针等底层设施进行抽象封装。这一努力取得了显著成功,主要得益于 C++ 的表达能力 —— 能创建强大高效的抽象,同时不损失运行时性能或增加内存开销。因此,在现代 C++ 中,原始指针通常被封装在更不易误用的抽象层之下(例如本章将探讨的标准智能指针);未封装的原始指针多用于表示“可访问但无所有权”的资源。

本章将探讨如何使用 C++ 标准智能指针:

在探索过程中,我们会始终关注并解释每种选择的代价。

准备好了吗?让我们开始吧!