c++ 的new 数组操作

今天群里一个朋友问到:

有class A,

1. A* pa = new A[3]  

2. pa[0] = A();

3. pa[1] = A();

4. pa[2] = A(); 

5. delete []pa;

 

构造函数和析构函数是怎么调用的? 

 

在1里,new A[3] 首先会分配内存,然后调用A的默认构造函数来初始化这个数组。所以

在这里A的构造函数被调用了3次。记住,这里只能调用A的默认构造函数。如果A没有默认构造

函数,那么会有编译错误。 什么叫默认构造函数?就是参数列表为Void的构造函数。

 

在2-4语句里,产生了三个匿名的临时变量。c++中匿名的临时变量的作用域是该临时变量坐在的表达式。

所以这里会有三个构造函数和三个析构函数

 

在5里,delete[] 会触发每个数组成员的析构函数,并释放这段内存。所以数组里的每个元素的析构函数

都被调用了一次。

 

所以大家注意的是, 如果你要删除一个用new分配的数组里的一个成员时,记得要手动调用该对象的

析构函数。这是我在STL的源代码看到的为数不多的需要程序员自己来调用析构函数的例子。

 

绝大部分情况下,析构函数都是编译器在编译的时候为你插入的(以及你使用delete的时候delete所调用的)。你完全不需要手动来call一个析构函数。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值