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

    0 引言


     

    智能指针通过引用计数(reference count)的方式来自动化/智能化管理内存,可以大大提高应用程序的灵活性,降低系统的复杂度。 在软件的重构中,考虑用智能指针来替代手动的new/delete 方式是值得探索的。 smart pointer is an object that help to manage the use and deletion of an object. 

    0.1 智能指针是一个模板, 类似于vector或者string. 因此,在初始化一个智能指针时必须要提供额外的信息:即指针可以指向的类型。eg:

      shared_ptr<string> p1;

      shared_ptr<list<int>> p2;

    0.2 智能指针中有一个class member应该就是它需要管理的指针本身。另外,还有一个static的number用来记录该指针的引用次数,可以通过调用use_count()函数来得到。

      shared_ptr<T> p(q);  ///< p 是shared_ptr q的拷贝,此操作会递增q中的计数器。q中的指针必须能转换为T*.

      p.use_count();

      p.unique();

    0.3 销毁

    当指向一个指针对象的最后一个shared_ptr被销毁时,shared_ptr类会自动销毁此对象。 它是通过析构函数完成销毁工作的。

    1 什么是智能指针,要如何使用它


     

    存在三种形式的智能指针:shared_ptr,  unique_ptr and weak_ptr. listed as below:

    1.1 shared_ptr: 当该指针有可能被多个对象管理时,可以用shared_ptr。基础语法:

      ///< create a shared_ptr
      shared_ptr<int> bar (new int(10));
      bar = make_shared<int> (20);
    
      ///< can be used as a pointer.
      if(p) or if (!p)
      *p
      p->mem or (*p).mem
      T* ptr = p.get();  ///< 返回p中保存的指针
      swap(p, q); ///< 交换p 和q中保存的指针
      p.swap(q);
    
       /// shared_ptr only operation
      shared_ptr<int> p = make_shared<int> (new int);
      shared_ptr<int> p(q);
    

    1.2 unique_ptr: 当用户想比较严格地控制指针的管理者时,应当使用unique_ptr. 

    1.3 weak_ptr

    2 智能指针的应用场景

    3 智能指针的缺陷和隐藏陷阱

    4 结论

  • 相关阅读:
    std thread
    windows更新包发布地址
    How to set up logging level for Spark application in IntelliJ IDEA?
    spark 错误 How to set heap size in spark within the Eclipse environment?
    hadoop 常用命令
    windows 安装hadoop 3.2.1
    windows JAVA_HOME 路径有空格,执行软连接
    day01MyBatisPlus条件构造器(04)
    day01MyBatisPlus的CRUD 接口(03)
    day01MyBatisPlus入门(02)
  • 原文地址:https://www.cnblogs.com/ghjnwk/p/15587564.html
Copyright © 2011-2022 走看看