C++26:std::indirect——给堆上对象补上值语义
来源:sandordargo.com — 2026-08-12
📋 概述
C++26 在 <memory> 中引入两个新词汇类型:std::indirect 和 std::polymorphic,由 P3019R14 提出,为堆分配对象赋予值语义。本文聚焦 std::indirect:它修复了 unique_ptr 作为成员时的两大缺陷——const 传播被破坏和拷贝被删除。indirect 提供深拷贝、const 传播、基于值的比较与哈希,常用于 PIMPL、递归类型与大成员场景,且可无样板地自动生成特殊成员函数。
🔑 核心要点
- 修复 unique_ptr 的 const 传播断裂:const 对象的成员不可再被改动。
- 提供深拷贝,拷贝间接对象会拷贝其拥有的对象,无需手写五件套。
- 支持基于值的比较与哈希,而不是比较指针。
- 适用于 PIMPL、递归类型与大成员场景,无 null/空状态。
💡 金句
std::indirect 就是那个当初为组合类成员而设计、而不是为所有权转移设计的 unique_ptr。
👍 0
👎 0
← 返回 Lobsters 首页