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

  • 相关阅读:
    性能测试基本功 手动配置nginx+phpcgi+zend+mysql
    MySQL的show full processlist命令
    LoadRunner测试Webservices的例子
    Firefox 5 公开测试下载
    Shunra 即将发布 PerformanceSuite 7.0 和NetworkCatcher 7.0
    LoadRunner常见问题
    动态生成的图片保存成png格式
    如何解决ASP.NET程序安装到繁体系统上的乱码问题
    在Ubuntu上下载、编译和安装Android最新源代码
    腾讯微博api的蛋疼问题
  • 原文地址:https://www.cnblogs.com/ghjnwk/p/15587564.html
Copyright © 2020-2023  润新知