C++ 强调值语义编程。默认情况下,代码直接操作对象本身,而非对象的间接引用(指针或引用)。当然,也允许间接访问对象,不过需要特殊的语法。第4章通过析构函数和 RAII 机制,探讨了资源管理与对象生命周期的关联,展现了 C++ 的核心优势:所有资源(包括内存)都能通过语言本身的机制隐式管理。
C++ 允许在代码中使用原始指针,但并不鼓励这样做。恰恰相反,原始指针是一种底层工具,效率极高但易误用,且很难直接从代码中推断出它对所指对象的所有权责任。从多年前(现已移除的)auto_ptr<T> 开始,C++ 社区就一直致力于通过提供语义明确、不易出错的类型(如标准容器和智能指针),对原始指针等底层设施进行抽象封装。这一努力取得了显著成功,主要得益于 C++ 的表达能力 —— 能创建强大高效的抽象,同时不损失运行时性能或增加内存开销。因此,在现代 C++ 中,原始指针通常被封装在更不易误用的抽象层之下(例如本章将探讨的标准智能指针);未封装的原始指针多用于表示“可访问但无所有权”的资源。
本章将探讨如何使用 C++ 标准智能指针:
理解其设计初衷
深入 std::unique_ptr:包括管理标量、数组,以及释放非典型分配资源的方式
分析 std::shared_ptr:了解这种重要但开销更大的类型的适用场景,以及何时应选择替代方案
概览 std::weak_ptr:作为 std::shared_ptr 的辅助,用于建模临时共享所有权
识别原始指针的合理使用场景:它们在 C++ 生态中仍有存在价值
在探索过程中,我们会始终关注并解释每种选择的代价。
准备好了吗?让我们开始吧!