zoukankan      html  css  js  c++  java
  • shared_ptr

    1、方便资源的管理,自动释放没有指针引用的资源。
    2、使用引用计数来标识是否有多余指针指向该资源。(shart_ptr本身指针会占1个引用)
    3、在赋值操作中, 原来资源的引用计数会减一,新指向的资源引用计数会加一。
      std::shared_ptr<Test> p1(new Test);
      std::shared_ptr<Test> p2(new Test);
      p1 = p2;
    4、引用计数加一/减一操作是原子性的,所以线程安全的。
    5、make_shared要优于使用new,make_shared可以一次将需要内存分配好。
      std::shared_ptr<Test> p = std::make_shared<Test>();
      std::shared_ptr<Test> p(new Test);
      std::shared_ptr的大小是原始指针的两倍,因为它的内部有一个原始指针指向资源,同时有个指针指向引用计数。
    6、引用计数是分配在动态分配的,std::shared_ptr支持拷贝,新的指针获可以获取前引用计数个数。
    构造
    1、通过构造函数
    std::shared_ptr<T> p1(new T());
    2、std::make_shared<T>辅助函数
    std::shared_ptr<T> p2 = std::make_shared<T>();
    3、reset方法来初始化shared_ptr
    p1.reset(new T());
    std::shared_ptr获得 std::weak_ptr 所指向的被管理对象的临时所有权
    std::shared_ptr<T>  ptr =  std::weak_ptr<T> wPtr.lock()
    1 use_count ()  // 返回引用计数的个数
    2 unique()    // 返回是否是独占所有权( use_count 为 1)
    3 swap()     // 交换两个 shared_ptr 对象(即交换所拥有的对象)
    4 reset()    // 放弃内部对象的所有权或拥有对象的变更, 会引起原有对象的引用计数的减少
    5 get()     //  返回内部对象(指针), 由于已经重载了()方法, 因此和直接使用对象是一样的.
    如 shared_ptr<int> sp(new int(1)); sp 与 sp.get()是等价的、
  • 相关阅读:
    Android开发之记账本开发第四天
    动手动脑——继承与多态
    跟踪某个类所创建对象的个数
    动手动脑——类与对象
    石家庄地铁模拟
    动手动脑——方法
    查询单词出现次数
    动手动脑——JAVA语法基础
    原码反码补码
    ATM机模拟系统
  • 原文地址:https://www.cnblogs.com/osbreak/p/9211257.html
Copyright © 2011-2022 走看看