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()是等价的、
  • 相关阅读:
    商贸通帐套隐藏方法
    固定资产打开提示:上年度数据未结转!
    ZOJ 2432 Greatest Common Increasing Subsequence
    POJ 1080 Human Gene Functions
    POJ 1088 滑雪
    POJ 1141 Brackets Sequence
    POJ 1050 To the Max
    HDOJ 1029 Ignatius and the Princess IV
    POJ 2247 Humble Numbers
    HDOJ 1181 变形课
  • 原文地址:https://www.cnblogs.com/osbreak/p/9211257.html
Copyright © 2011-2022 走看看