首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

    善用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提供,*,->操作,不直接提供指针运算和[]。

    1.8K10

    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类的生存周期有关 演示案例: 首先我们定义下面的函数返回一个指向于一个值的

    1.7K20

    【linux学习指南】模拟线程封装与智能指针shared_ptr

    每个 std::shared_ptr 都维护一个引用计数,记录有多少个 std::shared_ptr 共享同一个对象。...当一个新的 std::shared_ptr 指向一个对象时,引用计数加 1;当一个 std::shared_ptr 被销毁或者指向其他对象时,引用计数减 1。...当引用计数变为 0 时,说明没有任何 std::shared_ptr 再指向该对象,此时 std::shared_ptr 会自动调用对象的析构函数并释放内存。...std::make_shared 是一个便捷的函数,用于创建 std::shared_ptr 对象,它会在一次内存分配中同时分配对象和引用计数所需的内存,比分别使用 new 和 std::shared_ptr...对象 std::shared_ptr ptr1 = std::make_shared(); // 复制一个 std::shared_ptr 对象,

    7410

    实现一个strong_rc_ptr(非线程安全版本的std::shared_ptr)

    我们早期第一版直接用 std::shared_ptr 来维护订单信息。每次变更索引时都是重新入删除和插入一个 std::shared_ptr 。...在大多数场景下,这也没太大问题,因为大多数场景下参数传递 std::shared_ptr 也好,内存存放 std::shared_ptr 也好,通常上下文会存在更多逻辑操作,导致这个CPU Cache...比如如果比较 shared_ptr 和 shared_ptr 的时候。...std::shared_ptr 和 boost::shared_ptr 的差异 在写单元测试的时候,我发现 std::shared_ptr 和 boost::shared_ptr 的实现上还有一些行为上的差异...部分和 std::shared_ptr 差异的部分按 std::shared_ptr 的行为做了调整。 这样覆盖场景应该是比较完善了。

    10110

    当我们谈论shared_ptr的线程安全性时,我们在谈论什么

    自C++11起,shared_ptr从boost转正进入标准库已有10年了。然而当C++程序员们在谈论shared_ptr是不是线程安全的的时候,还时常存在分歧。...你认为shared_ptr有哪些线程安全隐患? shared_ptr 可能的线程安全隐患大概有如下几种,一是引用计数的加减操作是否线程安全,二是shared_ptr修改指向时,是否线程安全。...比如: shared_ptr sp1 = make_shared(); ... shared_ptr sp2 = sp1; ... shared_ptr sp3 = sp1;...shared_ptr对象,参数类型是引用: void fn(shared_ptr& sp) { ... } ......尽管如此,由于shared_ptr使用上的特殊性,所以我们有时也要将其纳入到shared_ptr相关的线程安全问题的讨论范围内。

    1.2K30

    C++17 中对数组的支持:std::shared_ptr 的深入理解与使用

    使用 std::shared_ptr 管理数组创建和初始化 std::shared_ptr 数组在 C++17 中,std::shared_ptr 具备了管理动态分配数组的能力,这为我们处理数组提供了极大的便利...std::shared_ptr 管理数组的优势自动内存管理std::shared_ptr 最显著的优势之一就是自动内存管理。...而使用 std::shared_ptr,只需要创建对象,其余的内存管理工作由 std::shared_ptr 自动完成,使代码更加简洁。...{ bool operator()(const std::shared_ptr& a, const std::shared_ptr& b) const { return...按值传递会增加引用计数,多个 std::shared_ptr 共享同一个资源;按引用传递则不会增加引用计数,只是传递了对原 std::shared_ptr 的引用。

    8600
    领券