从C++11开始,智能指针进入标准库,std::unique_ptr, std::shared_ptr 和 std::weak_ptr。那:
1,什么是智能指针?
2,为什么要用智能指针?
3,如何选用std::auto_ptr,std::unique_ptr, std::shared_ptr 和std::weak_ptr呢?
【什么是智能指针?】智能指针(Smart Pointer)本质是一个类(class),行为类似普通指针,都可以解引用(dereference)。它把指向对象的普通指针和对象的内存管理封装起来,自动管理对象的生存期。
智能指针在头文件<memory>中定义,打开<memory>,可以看到:
【为什么要用智能指针?】据统计,C++ 最常发生的bugs是与指针和内存管理相关的bugs,例如:空悬指针(dangling pointers), 野指针(Wild pointer),内存泄漏(memory leaks), 分配内存失败(allocation failures)等等。 智能指针可以协助程序员解决这些令人头痛的事情,自动处理内存分配和释放问题。
【如何选用std::auto_ptr,std::unique_ptr, std::shared_ptr 和std::weak_ptr呢?】
当允许多个指针指向同一个对象时,使用shared_ptr
当只允许一根指针“独占”所指向的对象时,使用unique_ptr
weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象。进行该对象的内存管理的是那个强引用的 shared_ptr。weak_ptr只是提供了对管理对象的一个访问手段。weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少。
auto_ptr在C++03标准中定义了,但在C++11标准中被废弃(deprecated)。
参考资料来源:http://www.cplusplus.com