入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

c++ 的new 数组操作

创建时间:2009-07-14 投稿人: 浏览次数:22827

今天群里一个朋友问到:

有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一个析构函数。

 

 

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。