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

 

posted @ 2021-11-22 10:46  十步一杀2017  阅读(36)  评论(0编辑  收藏  举报