C++智能指针(Smart Pointer)

       从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>,可以看到:

auto_ptr的定义

为什么要用智能指针?】据统计,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

LabVIEW中调用带指针的C++函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容