ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

C++之动态内存与智能指针以及底层实现原理

2020-12-09 23:02:06  阅读:453  来源: 互联网

标签:对象 make C++ 动态内存 shared ptr 指针


文章目录

1.动态内存

  • new,在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以选择对对象进行初始化;delete,接受一个动态对象的指针,销毁该对象,并释放与之关联的内存
  • 动态内存容易出现的问题:如果忘记释放内存,就会产生内存泄漏;如果在尚有指针引用内存的情况下释放了该内存,就会产生引用非法内存的指针

2.shared_ptr类

  • shared_ptr实现共享式拥有概念。多个智能指针可以指向相同对象,该对象和其相关资源会在“最后一个引用被销毁”时候释放。从名字share就可以看出了资源可以被多个指针共享,它使用计数机制来表明资源被几个指针共享
  • make_shared函数:最安全的分配和使用动态内存的方法,该函数必须指定想要创建的对象的类型,例如:
//指向一个值为42的int的shared_ptr
shared_ptr<int> p1 = make_shared<int>(42);
//指向一个值为“9999999999”的string
shared_prt<string> p2 = make_shared<string>(10,'9');
//指向一个值初始化的int,即值为0
shared_prt<int> p3 = make_shared<int>();

同时我们可以用auto定义一个对象来保存make_shared的结果,例如
auto p4 = make_shared<vector<string>>();

  • shared_ptr的拷贝和赋值:当进行拷贝和赋值操作时,每个shared_ptr都会记录有多少个shared_ptr指向相同的对象:
    auto p = make_shared<int>(42);//p指向的对象只有p一个引用者
    auto q(p);//p和q指向相同的对象,此对象有两个引用者

  • 关联的计数器(引用计数)递增一的情况:1.用一个shared_ptr初始化另一个shared_ptr 2.shared_ptr作为参数传递给一个函数 3.shared_ptr作为函数的返回值

  • 关联的计数器(引用计数)递减一的情况:1.给shared_ptr赋值一个新值 2.shared_ptr被销毁(局部的shared_ptr离开其作用域)

标签:对象,make,C++,动态内存,shared,ptr,指针
来源: https://blog.csdn.net/weixin_43518637/article/details/110942288

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有