C++智能指针(Smart|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)。它把指向对象的普通指针和对象的内存管理封装起来,自动管理对象的生存期。
智能指针在头文件
文章图片
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
【C++智能指针(Smart|C++智能指针(Smart Pointer)】当只允许一根指针“独占”所指向的对象时,使用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++函数》
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 人工智能|干货!人体姿态估计与运动预测
- c++基础概念笔记
- ROOM1
- 从前沿科技到现实应用,人脸识别智能门禁加速走进智慧社区
- 众泰T500智能互联双加载,让汽车生活更有趣
- 历史上的今天|【历史上的今天】2 月 16 日(世界上第一个 BBS 诞生;中国计算机教育开端;IBM 机器人赢得智能竞赛)
- 【兔兔*亲子】八大智能启蒙之第三周记录
- 基于stm32智能风扇|基于stm32智能风扇_一款基于STM32的智能灭火机器人设计