三大核心智能指针详解1. std::unique_ptr (独占所有权)作为最常用且性能最优的智能指针它确保资源在同一时间仅被一个指针持有。特性禁止拷贝不支持拷贝构造函数和赋值运算符支持移动可通过std::move()实现所有权转移零开销内存占用与原始指针相同无运行时性能损失实现原理封装原始指针并在析构时调用delete通过禁用拷贝构造函数确保独占性。2. std::shared_ptr (共享所有权)允许多个指针共享同一对象资源。核心机制引用计数采用原子操作的引用计数机制新增指针时计数1指针销毁或重定向时计数-1计数归零时自动释放内存底层结构包含两个指针成员指向目标对象的原始指针指向控制块的指针存储引用计数、弱引用计数及删除器注意虽然引用计数操作是线程安全的但对象访问本身不具备线程安全性。3. std::weak_ptr (弱引用)专为配合shared_ptr设计解决循环引用问题。特性不增加引用计数仅作观察需通过lock()方法转为shared_ptr才能访问对象典型应用环形结构、缓存系统、观察者模式循环引用问题及解决方案问题表现当两个对象通过shared_ptr相互持有时引用计数无法归零导致内存泄漏。解决方案将其中一方的引用改为weak_ptr打破强引用循环。std::move与智能指针的配合unique_ptr仅支持移动语义shared_ptr移动操作转移所有权计数不变拷贝操作才增加计数容器存储推荐使用std::move以减少引用计数操作开销智能指针使用指南最佳实践原则首选 unique_ptr在不需要共享所有权的情况下优先使用 unique_ptr性能最优使用 make_ 系列函数推荐使用 std::make_unique 和 std::make_shared优势异常安全且效率更高指针管理规范避免直接管理 new 分配的指针分配后应立即存入智能指针接口设计规范常规对象访问当函数仅需使用对象但不改变所有权时传递 T原始引用传递 T*原始指针共享所有权场景当函数需要共享所有权时传递 std::shared_ptrT所有权转移当函数需要接收所有权时传递 std::unique_ptrT右值引用或按值传递 std::unique_ptrT三指针对比总结类型所有权引用计数拷贝能力主要用途unique_ptr独占无仅移动资源独占管理、轻量级场景shared_ptr共享原子计数可拷贝共享生命周期、多线程环境weak_ptr无所有权弱引用计数可拷贝观察生命周期、解决循环引用