C++中为什么使用new而不使用malloc

文章讨论了在C++中使用new和malloc创建对象的区别。new会调用构造函数进行初始化,而malloc仅分配内存,不执行构造函数。因此,推荐使用new以确保对象正确构造,避免未定义的值。即使new内部使用了malloc,它提供了额外的构造过程。
摘要由CSDN通过智能技术生成

比如以下的类,我要新建一个Stuff数组:

Class Stuff{
	Public:
		int i;
		Stuff(){
			cout<<"正在执行构造函数"<<endl;
			i = 9810;
		}
};

//A
Stuff *A = new Stuff[size];
//B
//由于malloc默认返回的是void*的类型,所以要进行类型转换
//C++里面使用static_cast<Class>进行类型转换
Stuff *B = static_cast<Stuff*>(malloc(size * sizeof(Stuff)));

如果调用A的话,我们会看到打印出来的“正在执行构造函数”,有size个,因为初始化size个Stuff对象,每个都执行一次打印。
而且查询i的话,i的值也是9810,说明i = 9810;被执行了。

如果调用B的话,我们不会看到打印信息,查询i的话,得到的也是0。因为malloc只会单纯给你分配内存,它不会执行类其中的构造函数等初始化工具。

对于string、vector等类,如果你的构造函数没有正确执行,你初始化得到的可能是一堆奇奇怪怪的值。所以大多数情况下,都使用new,不要用malloc,除非你真的明白你在做什么。


不过,话说回来,其实new是先调用operator new,再调用构造函数的。而operator new函数,里面用的其实也是malloc,所以其实包含了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值