Skip to content

智能指针

裸指针在使用时有如下缺陷:

  1. 声明时不会指出涉及到的是单个对象还是数组
  2. 声明时没有提及使用完后是否需要析构对象,即无法分辨裸指针是否持有指向的对象
  3. 声明时无法分辨如何析构指向的对象(如delet或特定方法),不知道delet单个对象还是数组
  4. 没有正规的方式检查指针是否空悬

总之容易导致未定义行为和内存泄漏。

C++提供了共四种智能指针:,std::unique_ptr,std::shared_ptrstr::weak_ptr,其中std::auto_ptr已于C++11宣布弃用,C++17正式移除。

std::unique_ptr

特点是体积小和执行块,具有专属所有权,不允许被拷贝,移动会让它将所有权移交给目标,并将原指针悬空。