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()是等价的、
  • 相关阅读:
    游戏AI系列内容 咋样才能做个有意思的AI呢
    图片缩放的相关处理
    Lua 安全调用 metatable 的简单应用
    让Lua自己把文件夹下面的所有文件自动加载起来吧
    【原创】有利于提高xenomai 实时性的一些配置建议
    环境篇:Docker
    环境篇:Virtualbox+Vagrant安装Centos7
    环境篇:VMware Workstation安装Centos7
    软件篇:前端保姆->VSCode
    大数据篇:ElasticSearch
  • 原文地址:https://www.cnblogs.com/osbreak/p/9211257.html
Copyright © 2011-2022 走看看