《C++避坑神器·三》带参构造和初始化列表赋值区别

文章详细解释了在类Person中,使用初始化列表给phone类成员赋值时,会触发带参构造而非无参构造,以及在后续操作中可能涉及的析构函数。

文章目录

概要

带参构造和初始化列表赋值区别

技术细节

//手机类phone
class phone
{
public:
	phone()
	{
		cout << "phone无参构造" << endl;
	}
	phone(string name)
	{
		this->name = name;
		cout << "phone带参构造" << endl;
	}
private:
	string name;
};

//类对象作为类成员
class Person
{
public:
	Person(string name1, string pName) : name(name1), ph(pName)
	{
		//this->name = name1;
		//ph = pName;
	}
private:
	string name;
	phone ph;
};

Person类中有个手机类对象作为Person类的一个成员,如果直接如图中初始化列表方式给ph赋值,其实就是做了一个默认的操作Phone ph = pName; 这样ph直接是调用Phone类中的带参构造,不会调用无参构造。如果按照注释的方式赋值,实际做了两步操作,第一步:Phone ph;(已经在私有里面定义好了) 第二步: Ph = pName; 第一步ph调用无参构造,第二步ph对象又被赋值会调用带参构造。
需要注意的是当进行完第二步后此时的ph为带参构造的对象,第一步的无参构造的ph立刻销毁会调用析构函数,在屏幕上打印出来的顺序就是ph无参构造,ph带参构造,ph析构函数(析构的是无参构造的ph)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦回阑珊

一毛不嫌多,一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值