智能指针
裸指针在使用时有如下缺陷:
- 声明时不会指出涉及到的是单个对象还是数组
- 声明时没有提及使用完后是否需要析构对象,即无法分辨裸指针是否持有指向的对象
- 声明时无法分辨如何析构指向的对象(如delet或特定方法),不知道delet单个对象还是数组
- 没有正规的方式检查指针是否空悬
总之容易导致未定义行为和内存泄漏。
C++提供了共四种智能指针:,std::unique_ptr,std::shared_ptr和str::weak_ptr,其中std::auto_ptr已于C++11宣布弃用,C++17正式移除。
std::unique_ptr
特点是体积小和执行块,具有专属所有权,不允许被拷贝,移动会让它将所有权移交给目标,并将原指针悬空。