关于“有用的”默认构造函数的合成

本文探讨C++中默认构造函数的合成条件,包括带有默认构造函数的成员类对象、基类、含有虚函数的类及虚拟基类的类。通过具体示例,深入解析编译器自动合成构造函数的时机与行为。

我自己搭建了博客,以后可能不太在CSDN上发博文了,https://www.qingdujun.com/


所有的类都会自动产生一些默认的函数,即使是空类。

本文主要关注构造函数。

那么,什么时候才会合成出一个“有用的”default constructor呢?——当编译器需要它的时候!此外,被合成出来的constructor只执行编译器所需的行动。

以下分别讨论了编译器会主动合成出default constructor的四种情况。

[√] 1.“带有Default Constructor”的Member Class Object

class Foo {//explict constructor
public:
	Foo(){}
};

class Bar {//no default constructor
public:
	Foo foo;   //member object
	char* str;
};

[√] 2.“带有Default Constructor”的Base Class

class Foo {//explict constructor
public:
	Foo(){}
};

class Bar : public Foo {
public:
	char* str;
};

[√] 3.“带有一个Virtual Function”的Class

class Foo {
public:
	virtual void foo() = 0;
};

class Bar : public Foo {
public:
	char* str;
};

[√] 4.“带有Virtual Base Class”的Class

class Foo {
};

class Foo1 : virtual public Foo {
//__vbcFoo
};

class Foo2 : virtual public Foo {
};

class Bar : public Foo1, public Foo2 {
};

References:

[1] 《深度探索C++对象模型》 侯捷 译

©qingdujun
2018-12-10 北京 海淀


Reference: 《深度探索C++对象模型》 侯捷 译
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值