条款27:熟悉万能引用重载的替代方法
用enable_if或概念限制模板参数,实现更安全的重载选择。
用enable_if或概念限制模板参数,实现更安全的重载选择。
万能引用重载易导致推导冲突,推荐用模板特化或SFINAE替代。
万能引用能绑定左值和右值,类型依赖模板推导;右值引用只能绑定右值。
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,防止内存泄漏和重复释放。