条款23:理解stdmove和stdforward
std::move将对象转换为右值,不移动数据;std::forward根据模板参数条件转为右值,用于完美转发。两者本质都是类型转换,运行期不产生代码。
std::move将对象转换为右值,不移动数据;std::forward根据模板参数条件转为右值,用于完美转发。两者本质都是类型转换,运行期不产生代码。
Pimpl惯用法中,特殊成员函数需在实现文件定义,以避免 incomplete type 引发编译错误。
优先使用 std::make_unique 和 std::make_shared,避免重复类型、提升异常安全性与性能,除非需自定义删除器或特殊构造方式。
std::weak_ptr 观察 shared_ptr 管理的对象,避免循环引用导致资源永不释放。
用 std::shared_ptr 管理共享所有权资源,引用计数自动释放,避免资源悬空和泄漏。
用 std::unique_ptr 管理独占所有权资源,自动释放,避免手动 delete,防止内存泄漏和重复释放。
避免 auto 推导出代理类等意外类型,可用显式类型初始化强制获得期望类型,防止悬垂引用与未定义行为。
优先使用 auto 可避免类型冗长、提升可移植性与可维护性,并减少类型错误及提升性能,除非显式类型更清晰。
使用 IDE、decltype、辅助模板等手段查看类型推导结果,避免因推导不透明而引发理解或调试困难。
返回表达式的精确类型,保留引用和const属性,变量名返回声明类型,复杂表达式左值推导为引用。