动态内存与智能指针

本文探讨了动态内存使用的三种常见场景,包括未知对象数量、类型及共享数据的情况,并介绍了智能指针如何解决动态内存管理问题,特别是其get方法的正确使用及优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态内存与智能指针

使用动态内存出于以下三种原因

  1. 程序不知道自己需要使用多少对象
    典型的例子:
    数组,当我们不知道数组的大小时,就需要new一个空间。
    标准库的容器类也有动态改变大小的功能。
  2. 程序不知道所需对象的准确类型
    不知道内存被什么类型所识别,如opencv中的Mat类中的data成员,需要动态的决定它的类型。
  3. 程序需要在多个对象直接共享数据
    某些类分配的资源具有与原对象相对独立的生存周期。例如假定我们希望定义一个名为Blob的类,保存一组元素。与大多数类不同,我们希望Blob对象的不同拷贝之间共享相同的元素。即,当我们拷贝一个Blob时,原Blob对象记其拷贝应该引用相同的底层元素。
    这时在多个类之间,动态内存的释放就成了一个问题,因为它们共享同一个动态内存,如果多个对象中的一个被释放掉了,此对象不能释放共享的动态内存。
    这时智能指针就能很好的运用了,它能够保证动态内存的准确释放。

智能指针的get方法

智能指针定义了get方法返回一个内置指针,指向智能指针管理的对象,此函数是为了这样一种情况而设计的:我们不需要向不能使用智能指针的代码传递一个内置指针。
但此使用get时应注意:使用get返回的指针的代码不能delete此指针,同时,也不能使用这个指针去初始化另一个智能指针(智能指针也可能会释放它)。

另外

智能指针的另外一个好处就是,使用它并不需要关系动态内存的释放。即不用显式释放动态内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值