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 结论

  • 相关阅读:
    Indy10 系列(一)——获取最新的Indy源码
    Oracle9i中关于select into的执行过程 (转)
    Oracle创建删除用户、角色、表空间、导入导出数据库命令行方式总结(转)
    手动创建Oracle 11g数据库(转载)
    Indy10 系列(四)——编译Indy源码
    Indy10 系列(二)——获取最新的Indy源码
    Delphi 2010手动安装indy10.5.7
    Indy10 系列(三)——获取最新的Indy源码
    Indy10 系列(五)——安装Indy控件,重新编译Lazarus
    Unix文化RTFM
  • 原文地址:https://www.cnblogs.com/ghjnwk/p/15587564.html
Copyright © 2011-2022 走看看