亲爱的读者,我们正逐渐接近这次旅程的终点。在本书中,我们探讨了 C++ 对象模型的基本方面,并讨论了底层编程中一些潜在的危险环节。
我们通过 RAII 惯用法了解了 C++ 中资源管理的基础知识,研究了智能指针的使用方式,并实践了如何编写一个这样的类型。我们还以多种方式掌控了可用的内存分配函数,并编写了能够自行管理内存,或通过其他对象或类型(包括分配器)进行内存管理的容器。
这真是一段相当丰富的经历!
那么,还有哪些内容需要涵盖呢?嗯,还有很多……但一本书的容量毕竟有限。因此,在结束对 C++ 内存管理的讨论之前,我想我们可以来一场“茶话会”(是的,就你和我两个人),聊聊 C++ 当代内存管理中一些有趣的话题。
有些话题是最近才在标准中采纳(以本书写作时为准),以至于大多数(如果不是全部的话)库尚未实现;还有一些是标准委员会正在积极讨论的内容。
从 C++ 当前的状态,以及它在不久的将来可能呈现的面貌来审视这门语言非常重要,因为 C++ 仍在持续演进,而且速度相当快:每三年发布一次新的 C++ 标准,自 2011 年以来一直如此。有人觉得 C++ 的演进太慢,有人又觉得太快,但无论如何,这种演进是持续不断的(我们称这种发布节奏为“列车模型”,以强调其稳定的步伐),为这门我们热爱的语言带来了持续的改进和创新。
在本书写作时 —— 2025 年初的几周里,C++23 已经刚刚采纳为新标准,于 2024 年 11 月正式获批(我知道:ISO 流程确实需要一些时间),而委员会正在讨论针对 C++26(是的,已经!)和 C++29 的提案。
本章中我们将讨论的与内存管理相关的主题,本书尚未涉及的 C++23 标准内容,在本章写作时仍在为未来标准讨论中的内容。亲爱的读者,你即将读到的内容,可能会以你所看到的形式成为现实,也可能在 C++ 标准委员会的讨论和辩论之后以另一种形式出现……甚至最终可能根本不会实现。
即使这些话题最终没有以最初讨论的形式进入 C++ 标准,你也将会知道它们曾认真讨论过,也了解了它们试图解决的问题,并且这些特性有可能在未来的某个时刻成为语言的一部分。谁知道呢;也许你会灵光一现,找到合适的表达方式,将这些想法之一转化为一项提案,被 C++ 标准委员会讨论并最终采纳。
在本章中,我们将涵盖以下主题:
显式地启动一个或多个对象的生命周期,而无需调用构造函数;
简单迁移(Trivial relocation):它的含义是什么,以及标准委员会正在如何解决这一问题;
类型感知的内存分配与释放函数:它们的作用以及如何从中受益。
本章的讲解方式是通过我们试图解决的问题,来引出这些新特性(或即将出现的特性)。这种做法的目的是为了清楚地表明,这些特性确实针对的是实际存在的问题,它们将帮助真正的开发者更好地完成他们的工作。
我希望本章能够为你提供一些,关于 C++ 内存管理及相关设施的(尽管并不详尽)现代议题。