构造函数初始化列表

构造函数初始化列表

与普通构造函数的区别

构造函数初始化列表用于在显式初始化类成员。在平常的使用构造函数创建对象时,如果对象中将另一个对象作为成员,那么在调用构造函数之前,编译器会用成员对象的默认构造函数进行初始化。如果不想让编译器用默认的构造函数进行初始化,就要使用构造函数初始化列表来显式规定成员对象的初始化形式。

构造函数进行的操作是,将成员先初始化,再用给定值赋值给初始化后的成员,而构造函数初始化列表则是直接对成员进行初始化,两者之间的区别跟下面两种创建变量的方式区别类似:

//在创建的时候直接初始化,相当于构造函数初始化列表
int x = 3;

//先创建x,再赋值给x,相当于普通构造函数的初始化方式
int x;
x = 3;

防止非内置类型二次创建

对于内置类型,两种方式的初始化方法都是一样的效果。但是对于成员是一个对象的情况,则会有很大的区别,它会导致对成员对象进行多次不必要的复制,进而降低运行效率。有些时候如果管理不当,甚至会导致内存泄漏,更严重的是内存混乱,从而程序崩溃。下面的例子展示了这样的情况:

class Car{
	private:
		char * brand;
		double price;
	public:
		Car(){
			cout << "Using default constructor for Car." << endl;
			brand = new char[3];
	
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值