条款24:区分万能引用与右值引用
万能引用能绑定左值和右值,类型依赖模板推导;右值引用只能绑定右值。
万能引用能绑定左值和右值,类型依赖模板推导;右值引用只能绑定右值。
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 可避免类型冗长、提升可移植性与可维护性,并减少类型错误及提升性能,除非显式类型更清晰。