c++中智能指针是什么_C++智能指针原理与使用指南

智能指针通过自动管理动态内存防止泄漏和悬空指针。std::unique_ptr独占所有权,不可复制只能移动,超出作用域自动释放;std::shared_ptr共享所有权,采用引用计数,最后一个指针销毁时释放资源,推荐使用make_shared创建;std::weak_ptr弱引用不增引用计数,用于打破循环引用,需调用lock()获取临时shared_ptr。避免裸new/delete,禁止单一原始指针初始化多个智能指针,注意循环引用与weak_ptr开销。

c++中智能指针是什么_c++智能指针原理与使用指南

智能指针是C++中用于自动管理动态内存的工具,主要目的是防止内存泄漏和悬空指针。它们通过封装原始指针,在对象生命周期结束时自动释放所指向的内存,从而实现资源的自动管理。C++标准库提供了几种常用的智能指针:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。

std::unique_ptr:独占式所有权

特点: 一个 unique_ptr 独占其所指向的对象,不能被复制,只能转移所有权。

适用于不需要共享资源的场景,比如函数内部创建对象并确保其在作用域结束时被销毁。

使用示例:用 std::make_unique 创建(C++14起支持) 超出作用域时自动调用 delete 可通过 std::move 转移所有权,原指针变为 nullptr

代码示例:

立即学习“C++免费学习笔记(深入)”;

#include std::unique_ptr ptr = std::make_unique(10);// *ptr == 10{    auto ptr2 = std::move(ptr); // 所有权转移} // ptr2 销毁,内存释放// ptr 已为空,不能再使用

std::shared_ptr:共享式所有权

特点: 多个 shared_ptr 可以共享同一个对象,内部使用引用计数管理资源。当最后一个 shared_ptr 被销毁时,对象自动删除。

适合需要多个部分共同持有同一资源的场景。

关键机制:引用计数:每次拷贝增加计数,析构减少计数 用 std::make_shared 更高效(推荐) 注意循环引用问题(可用 weak_ptr 解决)

代码示例:

立即学习“C++免费学习笔记(深入)”;

#include auto sp1 = std::make_shared(20);std::shared_ptr sp2 = sp1; // 引用计数变为2// sp1 和 sp2 都指向同一块内存// 当两者都离开作用域后,内存才被释放

std::weak_ptr:弱引用,打破循环

用途: 配合 shared_ptr 使用,观察对象但不增加引用计数,防止循环引用导致内存无法释放。

常用于缓存、观察者模式等场景。

操作方式:从 shared_ptr 构造 访问前需调用 lock() 获取临时 shared_ptr lock() 返回空指针表示对象已销毁

示例:

std::shared_ptr sp = std::make_shared(30);std::weak_ptr wp = sp;if (auto temp = wp.lock()) {    // temp 是 shared_ptr,可安全使用 *temp} else {    // 对象已被释放}

使用建议与注意事项

避免直接使用 new/delete,优先选择 make_shared 和 make_unique。

不要将同一个原始指针交给多个智能指针管理 避免 shared_ptr 循环引用(A 持有 B 的 shared_ptr,B 也持有 A 的) 函数传参时,若只是读取对象,尽量传 const shared_ptr& 或原始指针 性能敏感场景注意 weak_ptr::lock 的开销

基本上就这些。智能指针让C++的内存管理更安全、简洁,掌握它们的原理和使用习惯能显著提升代码质量。合理选择类型,注意所有权语义,就能有效避免大部分资源管理问题。

以上就是c++++中智能指针是什么_C++智能指针原理与使用指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1476377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 00:21:23
下一篇 2025年12月19日 00:21:40

相关推荐

发表回复

登录后才能评论
关注微信