文章目录

  • 0. 前言
    • 0.1 使用智能指针的原因
    • 0.2 智能指针和普通指针的区别(什么是智能指针)
  • 1. auto_ptr
    • 1.1 基本说明
    • 1.2 例子:chestnut:
    • 1.3 使用建议
  • 3. unique_ptr
    • 3.1 实现原理
    • 3.2 unique_ptr特性
    • 3.3 例子:chestnut:
  • 4. shared_ptr
    • 4.1 shared_ptr 线程安全性
    • 4.2 使用陷阱——循环引用
  • 5. weak_ptr
    • 5.1 使用
    • 5.2 如何解决循环引用问题

本文有些内容参考了相关博客,但是由于没有第一时间记录因此丢失了参考链接,有缘看到的博友可以提醒我一下我可以补上

0. 前言

0.1 使用智能指针的原因

  1. 资源释放,指针没有置空;
  2. 内存泄漏;
  3. 多次释放coredump

0.2 智能指针和普通指针的区别(什么是智能指针)

在于智能指针实际上是对普通指针加了一层封装机制,区别是它负责自动释放所指的对象,这样的一层封装机制的目的是为了使得智能指针可以方便的管理一个对象的生命期。

新增了三种智能指针:unique_ptr、shared_ptr和weak_ptr。所有新增的智能指针都能与STL容器和移动语义协同工作。能够处理内存泄漏问题和空悬指针问题。

智能指针负责自动释放所指的对象,这样的一层封装机制的目的是为了使得智能指针可以方便的管理一个对象的生命期。

指针类型 特定
std::auto_ptr 被C++11弃用。auto指针存在的问题是,两个智能指针同时指向一块内存,就会两次释放同一块资源,自然报错。
std::unique_ptr (single ownership)unique指针规定一个智能指针独占一块内存资源。当两个智能指针同时指向一块内存,编译报错。
**实现原理:**将拷贝构造函数和赋值拷贝构造函数申明为private或protected。不允许拷贝构造函数和赋值操作符,但是支持移动构造函数,通过std:move把一个对象指针变成右值之后可以移动给另一个unique_ptr。
std::shared_ptr (shared ownership)多个智能指针可以指向相同对象,该对象和其相关资源会在“最后一个引用被销毁”时候释放。通过成员函数use_count()来查看资源的所有者个数。
std::weak_ptr (temp/no ownership)是对share_ptr的补充

智能指针的三个常用函数:

  1. get() 获取智能指针托管的指针地址
  2. release() 取消智能指针对动态内存的托管。析构对象。
  3. reset() 重置智能指针托管的内存地址。构造新对象,析构原对象。如果地址不一致,原来的会被析构掉

1. auto_ptr

(C++98的方案,C++11已经弃用) 采用所有权模式。

1.1 基本说明

// 头文件
#include <memory>
// 用法
auto_ptr<类型> 变量名(new 类型)

1.2 例子

C++ 智能指针我得用用看相关推荐

  1. android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升

    android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升 转载于:https://www.cnblogs.com/jeanschen/p/3507512.html

  2. 智能指针的释放_看完这篇,别再说不会智能指针了

    C++智能指针 一.智能指针的作用 上一篇介绍了内存池的原理和实现,详情请见内存池设计与实现: 内存池可以帮助我们有效的对内存进行管理,智能指针可以很方便的管理指针,避免出现内存泄漏: 智能指针的作用 ...

  3. c语言智能指针是什么,C ++中的智能指针

    原标题:C ++中的智能指针 考虑以下带有普通指针的简单C ++代码. MyClass *ptr = new MyClass(); ptr->doSomething(); // We must ...

  4. C++中的三种智能指针分析(RAII思想)

    2019独角兽企业重金招聘Python工程师标准>>> 智能指针 首先我们在理解智能指针之前我们先了解一下什么是RAII思想.RAII(Resource Acquisition Is ...

  5. C++ 中的智能指针以及如何使用它们

    在本文中,我们将讨论 C++ 中的智能指针.什么是智能指针,为什么以及如何正确使用它们? 指针用于访问程序外部的资源--比如堆内存.因此,为了访问堆内存(如果在堆内存中创建了任何东西),需要使用指针. ...

  6. “虎牙直播”实习生面试 c++中的智能指针

    刚刚接到了"虎牙直播"实习生的电话面试,说实在我都忘了当初什么时候投的的了,是C++方向的.下面说一说电话面试的过程. 本来中午一个珠海的有人给我打电话,我没接到.后来中午我吃饭时 ...

  7. 冰冰学习笔记:智能指针

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  8. bartender一行打印两个二次开发_C++ 智能指针和二叉树:图解层序遍历和逐层打印二叉树...

    作者:apocelipes  链接:https://www.cnblogs.com/apocelipes/p/10758692.html 二叉树是极为常见的数据结构,关于如何遍历其中元素的文章更是数不 ...

  9. 五点讲述C++智能指针的点点滴滴

    (在学习C/C++或者想要学习C/C++可以加我们的学习交流QQ群:712263501群内有相关学习资料) 0.摘要 本文先讲了智能指针存在之前C++面临的窘境,并顺理成章地引出利用RAII技术封装普 ...

最新文章

  1. Python处理时间日期模块
  2. 复位 stm32_stm32学习笔记
  3. 如何更改linux文件的拥有者及用户组(chown和chgrp)
  4. Java实现Redis分布锁
  5. 使用Javascript获取图片坐标以及宽度高度的方法
  6. MySQL 删除字段数据某关键字后的所有数据
  7. ucc编译器(语义分析)
  8. [RHEL5企业级Linux服务攻略]--第1季 Linux服务器的搭建与测试
  9. 火狐浏览器读取ukey_火狐 83版引入HTTPS-Only模式 确保访问安全连接
  10. ansible 循环与条件判断when
  11. mysql知识点拾遗梳理
  12. 小米便签源码分析——UI包
  13. 用Python画出奥运五环图 (Python经典编程案例)
  14. IDEA 可以提神开发效率的插件
  15. js或jquery实现文件下载
  16. 手机端微信发朋友圈功能测试点总结
  17. 计算并返回 x 的平方根,其中 x 是非负整数。
  18. pytorch RuntimeError: size mismatch, m1: [64 x 784], m2: [784 x 10] at
  19. 实现pygame自定义鼠标外形
  20. Latex从零基础入门到完成论文格式修改

热门文章

  1. R语言数据整理Data Tidying(基于tidyr包)
  2. 色调映射:Edge-Preserving Decompositions for Multi-Scale Tone and Detail Manipulation
  3. 总结:工作流,页面流,逻辑流(业务流)
  4. 西数宣布将绿盘并入蓝盘
  5. 帆软FineBI随时记
  6. 职场历练【管理学之三】
  7. 三问中国电子云,此时入局的深意是什么?
  8. MATLAB和EXCEL交互 Spreadsheet Link
  9. kali2021安装百度网盘
  10. 计算机科学中atm是什么,计算机专业知识:ATM网络基本原理