1. 智能指针

为了更加容易(更加安全)的使用动态内存,引入了智能指针的概念。智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。

智能指针是一个RAII类模型,用于动态分配内存,其设计思想是将基本类型指针封装为(模板)类对象指针,并在离开作用域时调用析构函数,使用delete删除指针所指向的内存空间。

分为以下几种:

auto_ptr、unique_ptr、shared_ptr和weak_ptr

1.1. auto_ptr

实现独占式拥有的概念,同一时间只能有一个智能指针可以指向该对象。

但auto_ptr在C++11中被摒弃,其主要问题在于:

  • 对象所有权的转移,比如在函数传参过程中,对象所有权不会返还,从而存在潜在的内存崩溃问题;
  • 不能指向数组,也不能作为STL容器的成员。

1.2. unique_ptr

实现独占式拥有的概念,同一时间只能有一个智能指针可以指向该对象。

因为无法进行拷贝构造和拷贝赋值,但是可以进行移动构造和移动赋值;

1.3. shared_ptr

实现共享式拥有的概念,即多个智能指针可以指向相同的对象,该对象及相关资源会在其所指对象不再使用之后,自动释放与对象相关的资源;

1.4. weak_ptr

解决shared_ptr相互引用时,两个指针的引用计数永远不会下降为0,从而导致死锁问题。而weak_ptr是对对象的一种弱引用,可以绑定到shared_ptr,但不会增加对象的引用计数。

Copyright © ershouche-FE 2019 all right reserved,powered by Gitbook文件修订时间: 2022-02-28 11:59:10

results matching ""

    No results matching ""