码迷,mamicode.com
首页 > 编程语言 > 详细

浅谈C++智能指针

时间:2020-04-05 22:08:33      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:智能指针   概念   com   计数   nbsp   span   自己   调用   保存   

操作内存

创建内存:new

过程:用new创建内存,如果成功的话那么直接分配,然后调用对象的构造函数,如果分配不够,那么先去调用用户自己写的set_new_handler函数,一般这个函数是用来释放些内存,然后使多点内存,然后再去申请,如果还是不行,再调用该函数,但是一般就是用个标记变量释放第一次,第二次直接退出,然后会返回一个bad_alloc错误

 

释放内存:delete

过程:调用析构函数,然后释放内存,如果释放一个数组,那么就是找到数组前几个字节,一般有个保存长度的东西

 

智能指针

原因:因为动态内存在用指针使用上,如果忘记释放,那么很容易造成内存泄漏,所以推出了智能指针,智能指针也就是一个利用了rall资源管理机制,就是利用把当前变量转换成对象,利用析构函数来释放内存

 

shared_ptr<>:首先我们要清楚的是这是一个对象,也就是包括了构造 析构 赋值 等的一个东西,这个话是一个能允许多个指针来操作的一个指针

核心概念:类里面包含一个计数器,一个指针,通过拷贝构造,赋值 来使当前计数器加一,如果释放计数器减一,计数器为0才使用delete,改变指向的时候,就要先把老对象计数器减一,然后再去改变指向再计数器加一

初始化:开始利用构造函数进行初始化,如果在外面的话就需要使用make_shared<T>(x)来把当前给转化成智能指针对象

 

技术图片

 

 

 

unique_ptr<int> :也就是只能一个指针指向对象,所以就需要把拷贝构造和赋值操作都给禁用掉

技术图片

 

 主要问题:

u.release 不能直接普通的调用,这个只是放弃控制权而已,但是这个又是只有一个指针指向,如果不把返回值给其他对象那么就会找出内存泄漏

正确操作 u1.reset(u2.release)

浅谈C++智能指针

标签:智能指针   概念   com   计数   nbsp   span   自己   调用   保存   

原文地址:https://www.cnblogs.com/Lis-/p/12639364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!