shellmad-15_C++新特性 引用计数
要正确理解智能指针,首先必须理解引用计数技术。
深拷贝、浅拷贝的概念
深拷贝的优缺点:
优点:每一个对象(哪怕是通过拷贝构造函数实例化的对象)的指针都有指向的内存空间而不是共享,所以在对象析构的时候就不存在重复释放或内存泄漏的问题了。
缺点:内存开销大
- 注解:假如是a="hello,"; b="world!"; 现在要执行拷贝行为:b=a; 如果是深拷贝(不用默认的拷贝构造,而是自己写的拷贝构造),则首先为b动态分配和a所占用内存空间一样大小的内存空间,然后执行字符串复制, 把a的内容复制给b,这样a和b就会指向各自的内存空间。
浅拷贝优缺点:
优点:通过拷贝构造函数实例化的对象的指针数据变量指向共享的内存空间,因此内存开销较小。
缺点:对象析构的时候可能会重复释放或者造成内存泄漏。
- 注解:假如是a="hello,"; b="world!"; 现在要执行拷贝行为:b=a; 如果是浅拷贝(用默认的拷贝构造,而不是自己写的拷贝构造),则b会指向a指向的内存空间,这样a和b就会指向相同的内存空间,从而在拷贝的时候会造成内存泄漏,因为b此时改变了指向,那它原来指向的内存空间("world!")就变成了"孤儿"。
思考:能不能把深拷贝和浅拷贝的有点结合起来呢?结合它们的优点,避开它们各自的缺点。
举例说明:
在深拷贝的情况下,通过拷贝构造或者拷贝赋值构造的对象均各自包含自己的指针指向"hello"。
显然,这样比较浪费内存,存在冗余,那么下面的版本更好:
注解:
- 它们使用同一块内存(资源)。
- 但是,此时对其中任一个变量的操作都会影响其它变量指向的内容。
- 释放任何一个变量的内存,其他的变量也同时被释放,这个叫重复释放问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理