首页
学习
活动
专区
圈层
工具
发布

boost 智能指针 shared_ptr

但只有 shared_ptr 是最接近普通指针的一种智能指针,他具有一些非常良好的特性,比如计数器等等,使用 shared_ptr 可以让我们不用花费精力在内存回收上。...其他的一些指针与 shared_ptr 的区别如下表: 本文主要介绍 shared_ptr 的一些特性,以后如果你使用到 boost 库,那么用到这个智能指针也会是最多的。...2、boost::shared_ptr不需要手动的调用类似release****方法: 它不像侵入式实现的智能指针一样需要手动的调用类似release方法,全部用由shared_ptr内部的计数器自动增减...例如std::vector IntVec,使用shared_ptr方式为std::vectorshared_ptr > IntptrVec. 4、boost::shared_ptr...boost::shared_ptr ptr_obj001(new MyClass()); cout << ptr_obj001.use_count() << endl; boost::shared_ptr

52910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面试官:为什么大厂拒绝使用shared_ptr(shared_ptr vs intrusive_ptr)?

    阶段 特点 问题 优化 早期 大量使用 shared_ptr 捕获 this 循环引用、内存泄漏 改成 weak_ptr 中期 shared_ptr 在百万 IOPS 下性能瓶颈 5~15% CPU...新版部分改 intrusive_ptr,部分用裸指针 BlueStore shared_ptr、shared_ptr buffer 分配 + 原子操作开销大 大量切 intrusive_ptr...Objecter 用 shared_ptr 追踪请求 回调泄漏问题明显 改 intrusive_ptr + 智能 weak 回调 librados 客户端 API 仍暴露 shared_ptr...兼容性考虑 对外 shared_ptr,内部 intrusive_ptr 2.1 问题背景 Ceph 没有完全放弃 shared_ptr,但在核心路径上几乎全部替换成 intrusive_ptr。...对比 • shared_ptr 内部引用计数是 原子操作,在多个线程中复制、销毁智能指针是安全的。

    21510

    善用shared_ptr,远离内存泄漏(文末福利)

    中说到,如果有可能就使用unique_ptr,然后很多时候对象是需要共享的,因此shared_ptr也就会用得很多。...shared_ptr允许多个指向同一个对象,当指向对象的最后一个shared_ptr销毁时,该对象也就会自动销毁。因此,善用shared_ptr,能够远离内存泄漏。...存放于容器中的shared_ptr 如果你的容器中存放的是shared_ptr,而你后面又不再需要它时,记得使用erase删除那些不要的元素,否则由于引用计数一直存在,其对象将始终得不到销毁,除非容器本身被销毁...*/ std::shared_ptr sp2(p); return 0; } 这样会导致两个shared_ptr管理同一个对象,当其中一个被销毁时,其管理的对象会被销毁...总结 以上就是shared_ptr基本内容,一般来说,规范使用shared_ptr能很大程度避免内存泄露。注意,shared_ptr提供,*,->操作,不直接提供指针运算和[]。

    2K10

    C++11 shared_ptr 原理与详细教程

    多个 shared_ptr 实例可以同时管理同一个对象,当最后一个持有该对象的 shared_ptr 被销毁时,对象才会被自动释放。...原理2.1 引用计数机制shared_ptr 的核心是引用计数(reference count):每个被管理的对象都有一个关联的引用计数器,记录当前有多少个 shared_ptr 指向它当创建新的 shared_ptr...拷贝时,引用计数增加 1当 shared_ptr 被销毁或重置时,引用计数减少 1当引用计数变为0时,对象被自动删除2.2 控制块结构shared_ptr 内部通过控制块(control block)...2.4 简化版 shared_ptr 实现下面通过实现简化版 shared_ptr 理解其工作原理:#include #include // 前向声明template...());使用 weak_ptr 解决循环引用在双向链表、树等数据结构中,父节点持有子节点的 shared_ptr,子节点持有父节点的 weak_ptr线程安全注意事项shared_ptr

    74210

    【C++Qt shared_ptr 与 线程池】合作使用案例

    以下是一个结合 std::shared_ptr 和 Qt 线程池(QThreadPool)的完整案例,展示了如何在多线程任务中安全管理资源,避免内存泄漏。...案例场景 任务目标:在后台线程中处理一个耗时的图像检测任务,任务对象通过 std::shared_ptr 管理。 关键需求: 确保任务对象在任务完成后自动释放。...通过 shared_ptr 管理生命周期: std::shared_ptr task = std::make_shared(inputImage); shared_ptr...避免循环引用: 如果任务对象持有指向主窗口的指针,需使用原始指针或 weak_ptr,避免 shared_ptr 循环引用导致内存泄漏。...通过此案例,您可以安全地在 Qt 线程池中使用 std::shared_ptr,确保资源生命周期正确管理。

    10810

    C++(STL):03---智能指针之shared_ptr

    //指向一个值为42的int的shared_ptr shared_ptr p = make_shared(42); //p2指向一个值为10个'9'的string shared_ptr...引用计数:shared_ptr类所指向的对象都有一个引用计数 但对shared_ptr类进行拷贝时,计数器就会增加。...例如:当用一个shared_ptr初始化另一个shared_ptr、或者它作为参数传递给一个函数以及作为函数的返回值,它所关联的计数器就会增加 当我们给让shared_ptr指向另一个对象或者shared_ptr...shared_ptr类是通过析构函数来完成销毁工作的 内存浪费:因为只有在销毁掉最后一个shared_ptr时,该指针所指向的内存才会释放,因此如果你忘记了销毁程序不再需要的shared_ptr,程序仍然正在执行...,那么就造成内存浪费 五、shared_ptr与作用域的关系 shared_ptr类所指向的内存何时被释放,与shared_ptr类的生存周期有关 演示案例: 首先我们定义下面的函数返回一个指向于一个值的

    2K20

    深入理解 C++20 中的 `std::shared_ptr` 原子操作

    幸运的是,C++ 标准库提供了针对 std::shared_ptr 的原子操作函数,这些函数可以帮助我们安全地在多线程环境中使用 std::shared_ptr。...1. std::shared_ptr 的线程安全问题std::shared_ptr 的控制块是线程安全的,这意味着不同的 std::shared_ptr 对象可以同时访问同一个控制块,而不会引发数据竞争...2. std::shared_ptr 原子操作函数为了在多线程环境中安全地使用 std::shared_ptr,C++11 引入了一系列原子操作函数。...std::shared_ptr ptr = std::make_shared(42);std::shared_ptr expected = ptr;std::shared_ptr...总结std::shared_ptr 的原子操作函数为我们提供了一种在多线程环境中安全使用 std::shared_ptr 的方法。

    58000
    领券