C++ new malloc 初始化与构造函数

本文探讨了C++中对象创建的不同方式及其初始化过程,包括使用new与malloc的区别,以及构造函数与初始化列表的工作原理。通过具体代码示例展示了成员变量如何被初始化,并对比了不同初始化方法的效果。

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

Effective item 12

 

new 分配空间->初始化->构造函数

malloc 分配空间

 

对象的创建分两步:
1. 数据成员初始化。(参见条款13)
2. 执行被调用构造函数体内的动作。

 

由于a中的s未被初始化,也就是没有调用string的默认构造函数 

导致s->s = "abc"异常

 

使用AA *a = new AA;正常运行

 

 

 

显示:

BB constructor    // 对AA类中成员的初始化过程
AA constructor    // 对AA构造函数的调用
AA destructor     // 对AA析构函数的调用
BB destructor    

 

使用malloc无任何显示

 

 

 

初始化列表与构造函数:

 

初始化列表 是复制构造函数的过程 即Intialization  (const 和引用数据 只能初始化 不可以赋值) (使用初始化列表的对象 默认初始化过程不再进行)

 

构造函数     是赋值过程                即assignment   (赋值前 已经有了一个默认初始化过程[调用他的默认构造函数]  然后在赋值操作 效率比直接利用初始化列表低)

 

 

在构造函数内对成员变量赋初值:

显示:

BB constructor    // main 中b的构造
CC constructor    // main 中c的构造
BB constructor    // 类AA对BB的默认初始化 通过BB的默认构造函数
CC constructor    // 类AA对CC的默认初始化 通过CC的默认构造函数
BB assignment    // 类AA构造函数中的赋值
CC assignment    // 类AA构造函数中的赋值
CC destructor
BB destructor

 

 

在初始化列表中初始化

显示:

BB constructor   // main 中b的构造
CC constructor    // main 中c的构造
BB copy constructor   // 类AA对BB的初始化列表中的初始化 通过BB的复制构造函数   【省去了上例的默认初始化过程】
CC copy constructor  // 类AA对CC的初始化列表中的初始化 通过CC的复制构造函数   【省去了上例的默认初始化过程】
CC destructor
BB destructor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值