C++ 动态分配内存的好处

实例化一个类有两种方式:

// 假设有一个类A

// 方式一:直接定义法
A a;
// 方式二:动态内存分配法
A * a = new A();

两者有什么差别呢?
实际上,方式二即等价于如下代码:

A * a = new A();

等价于

A * a;
a = new A();

方式一就是直接将a放入栈区(局部变量,大小受限,自动释放);

方式二则是在堆区(动态内存,大小任意,手动释放)分配一块内存,然后用指针a去指向这块内存;

那么我们很容易就知道为什么要使用动态内存分配来实例化一个类。

原因:

1.可以动态的申请空间,以便动态确定对象所需要的内存;
2.便于储存大型对象,通常情况下栈区的大小容不下过于庞大的对象;
3.传递指针比传递整个对象更方便高效;(当然对于一个变量也可以取地址,但是临时变量的地址是不能长久使用的,特别是返回临时变量的地址是大忌)
4.同时传递指针可以便于大家共同维护一个空间,指针在传递的过程中,大家都可以修改指针指向的内容,当然要加锁进行保护,这样一处修改,处处修改,否则就要设置全局的变量,大家统一修改使用;

举几个生动形象的例子解释以上三条原因:
1. 每个人都要吃盐,盐不够了再去买显然比把这辈子要吃的盐一次性买下来要明智;
2. 如果你是卖盐的,储存了很多盐,你只需要建一个仓库把盐放进去,然后自己记住仓库地址即可,而不需要把盐全部放在自己的家中;
3. 如果要去很远的地方谈卖盐的生意,只需要选一些有代表性的信息(地址)给对方就可以了,不需要把整个仓库搬过去给对方看。

4.比如a,b,c三个人一起卖盐,然后都知道仓库的地址,然后A卖的时候,知道地址就可以把盐取走,仓库里的盐变少了,这样b和c的仓库都被修改了,这样就达到了一个一处修改,处处修改,如果不是指针,而是给三个人都有一个全量的仓库,那么一个修改,另外两个不会修改。想到达统一,就得一个人修改,后再通知另外两个盐变少了多少。

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值