C++ 编程语言正在探索 C++26 标准中的一种新机制,旨在解决管理复合对象(包含其他对象作为成员的对象)的复杂性。管理这些对象的一种常见模式是 pImpl(指向实现的指针)惯用法,它通过指向私有结构的指针来隐藏内部细节。虽然这种方法有效,但通常需要手动管理内存和指针,例如使用 `std::unique_ptr`。提议的 `std::polymorphic` 类型旨在提供一种更集成的处理这些结构的方法,在类型安全和资源管理之间提供平衡。

这一讨论的核心是 C++ 如何处理可以表示不同类型但共享公共接口的对象。例如,开发人员可能想要一个结构来表示不同类型的事件,例如温度读数或烟雾报警器警报。传统上,这可能会使用“标记联合体”来处理——即与枚举配对的联合体,用于跟踪哪个成员处于活动状态。然而,当成员涉及动态内存时,在 C++ 中手动实现标记联合体是出了名的困难,因为程序员必须为活动成员手动调用正确的析构函数。提议的 `std::polymorphic` 类型寻求自动化这一过程,提供一个类型安全的容器,自动管理其内部组件的生命周期。

围绕这些进展的社区讨论突显了现代 C++ 演进的收益与权衡。一些开发人员认为,这些新类型提供了手动实现所缺乏的关键安全性和资源管理,特别是在处理复杂的动态分配数据时。另一些人指出,现有的工具(如 `std::variant`)已经为类似的用例提供了高度的类型安全和生命周期管理。此外,关于对象的“已移动(moved-from)”状态仍存在持续争论;虽然有些人倾向于删除移动构造函数以避免“无值”状态,但另一些人认为,移动对象的能力对于 `std::vector` 等标准容器中的性能仍然至关重要。这些讨论反映了在语言的性能目标与对更安全、更易维护的抽象需求之间寻求平衡的持续努力。