zoukankan      html  css  js  c++  java
  • 智能指针shared_ptr

     shared_ptr基础

    智能指针是存储动态分配对象指针的类,用于生命周期的控制。当指针离开其作用域时,自动销毁动态分配的空间,防止内存泄漏。
    使用智能指针需要包含头文件#include<memory>

    std::shared_ptr采用引用计数,每一个shared_ptr的拷贝都指向相同的内容,当最后一个shared_ptr析构的时候,内存被释放

    shared_ptr 是为了解决 auto_ptr 在对象所有权上的局限性(auto_ptr 是独占的), 在使用引用计数的机制上提供了可以共享所有权的智能指针, 当然这需要额外的开销:
      (1) shared_ptr 对象除了包括一个所拥有对象的指针外, 还必须包括一个引用计数代理对象的指针.
      (2) 时间上的开销主要在初始化和拷贝操作上, *和->操作符重载的开销跟auto_ptr是一样.
      (3) 开销并不是我们不使用shared_ptr的理由, 永远不要进行不成熟的优化, 直到性能分析器告诉你这一点.

      使用方法:

    // 可以使用模板函数 make_shared 创建对象, make_shared 需指定类型('<>'中)及参数('()'内), 传递的参数必须与指定的类型的构造函数匹配. 如:
      std::shared_ptr<int> sp1 = std::make_shared<int>(10);
      std::shared_ptr<std::string> sp2 = std::make_shared<std::string>("Hello c++");
    // 也可以定义 auto 类型的变量来保存 make_shared 的结果.
      auto sp3 = std::make_shared<int>(11);
      printf("sp3=%d
    ", *sp3);
      auto sp4 = std::make_shared<std::string>("C++11");
      printf("sp4=%s
    ", (*sp4).c_str());
    

     

    参考链接:https://www.cnblogs.com/diysoul/p/5930361.html,特别感谢!

                      https://www.jianshu.com/p/d304cfa56ca0

  • 相关阅读:
    websocket 初识
    JavaScript 系列博客(四)
    JavaScript 系列博客(三)
    JavaScript 系列博客(二)
    JavaScript 系列博客(一)
    前端(八)之形变
    前端(七)之动画与阴影
    java变量、数据类型
    js简单的获取与输出
    Eclipse字体修改
  • 原文地址:https://www.cnblogs.com/hjh-666/p/15508113.html
Copyright © 2011-2022 走看看