c++ 的new 数组操作

本文解析了C++中构造函数与析构函数的调用时机,特别是通过new与delete操作符管理的对象。重点介绍了数组对象的创建与销毁过程中构造函数与析构函数的调用细节。

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

今天群里一个朋友问到:

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

 

 

C++中,使用关键字new可以动态地分配内存来创建数组。要创建一个数组,可以使用以下语法:bool* array = new bool[10]。这将配一个具有10个元素的bool类型的数组。根据引用,这个数组可以是未初始化的或初始化为0。另外,引用指出new关键字不是函数,而是C++的关键字。它可以用来动态分配内存,并与delete关键字一起使用来释放分配的内存。需要注意的是,在使用new创建数组时,需要额外的内存来保存数组的大小,以便在使用delete释放数组时正确调用析构函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [c++ new一个数组](https://blog.youkuaiyun.com/lixinglaing/article/details/81434608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [c++ new delete new[] delete[] 底层实现](https://blog.youkuaiyun.com/cFarmerReally/article/details/54585443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值