智能指针是C++11引入的自动内存管理机制,主要含unique_ptr(独占、零开销)和shared_ptr(共享、带引用计数),应优先选unique_ptr,shared_ptr仅用于明确需多方共管的场景。

智能指针是 C++11 引入的核心特性,用来自动管理动态内存,避免手动 new/delete 带来的泄漏、重复释放和悬挂指针问题。unique_ptr 和 shared_ptr 是最常用的两种,它们语义清晰、开销可控,关键在于按所有权模型选对类型。
它表示“唯一拥有”堆对象的语义,不能拷贝,只能移动。底层不带引用计数,几乎零开销,适合绝大多数需要动态分配但生命周期明确的场景。
std::make_unique 构造并直接返回,调用方自然接管所有权std::vector<:unique_ptr>></:unique_ptr>),避免对象切片,支持多态示例:
auto p = std::make_unique
std::vector<:unique_ptr>> shapes;
shapes.push_back(std::make_unique
多个 shared_ptr 可共同指向同一对象,通过引用计数自动管理生存期。适用于真正需要“多方共管”的场景,但要注意循环引用风险和额外开销(控制块内存 + 原子操作)。
示例:
auto sp1 = std::make_shared();
auto sp2 = sp1; // 引用计数+1
{ auto wp = std::weak_ptr(sp1); } // 不影响计数
不是所有 new 都该套智能指针。栈对象优先;数组用 std::unique_ptr<t></t> 或 std::vector;C 风格资源(FILE*、HANDLE)必须配自定义 deleter。shared_ptr 别轻易用于局部短生命周期对象——它比 unique_ptr 重得多,且容易掩盖设计问题。
立即学习“C++免费学习笔记(深入)”;
记住:unique_ptr 是默认选择;shared_ptr 是特例,得有明确的共享理由。
以上就是c++++11智能指针怎么用 unique_ptr和shared_ptr的使用场景【现代c++】的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号