shared_ptr通过引用计数和控制块实现共享所有权,use_count跟踪共享对象的指针数量,对象析构时自动释放资源;make_shared将对象与控制块内存合并,提升性能;多线程下引用计数操作原子安全,但共享对象访问需额外同步;循环引用导致内存泄漏,可用weak_ptr打破循环。

智能指针 shared_ptr 的核心目标是实现对象的共享所有权,确保资源在所有持有者都不再使用时自动释放。它通过引用计数机制来管理动态分配的对象生命周期。
每个 shared_ptr 实例指向一个控制块(control block),该控制块包含:
当一个新的 shared_ptr 共享对象时,use_count 增加;当 shared_ptr 被销毁或重新赋值时,use_count 减少。一旦 use_count 变为 0,控制块会调用删除器释放所管理的对象。
控制块可以与对象一起分配(make_shared 优化)或单独分配:
立即学习“C++免费学习笔记(深入)”;
shared_ptr 的引用计数操作是原子的(在大多数标准库实现中),这意味着多个线程同时修改不同的 shared_ptr 实例(指向同一对象)是安全的。但注意:
当两个对象通过 shared_ptr 相互引用时,引用计数无法归零,导致内存泄漏。解决方法是使用 weak_ptr 打破循环。weak_ptr 不增加引用计数,只观察对象是否存在。
基本上就这些:shared_ptr 靠引用计数 + 控制块实现自动内存管理,配合 make_shared 提高性能,用 weak_ptr 避免循环引用。不复杂但容易忽略细节。
以上就是c++++智能指针shared_ptr的实现原理_c++ shared_ptr实现原理的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号