深度了解default constructor(深度了解默认构造函数)

default constructor(默认构造函数)

例子1:

class Test

{

int  a;

void *p;

};

首先了解一个概念,默认构造函数只有在编译器需要的时候才会自动生成,在程序员需要的情况下是不会自动合成的。


编译器需要默认构造函数的四个场合:

a、类内有自定义类型成员(类成员),并且自定义类型成员带有默认构造函数。

b、基类具有默认构造函数。

b、体现多态特性(只要包含一个虚函数就会体现多态特性),这个时候需要一定需要构造函数去维护自己的虚指针。(注意点:如果某个类体现出多态特性那么他的析构函数一定是虚函数,关联书籍effective C++)。

c、虚继承,虚继承的base subobject的位置不确定也需要构造函数去维护自己的base subobject的位置。


以上四个场合一定会生成默认构造函数去满足编译器的需求。

a、调用类成员的默认构造函数(编译器通过合成的构造函数的初始化列表调用)。

b、调用基类的默认构造函数。

c、初始化虚函数指针。

d、维护虚基类的位置。


*****另外,如果自己书写了任何一个构造函数,编译器就不会再合成一个默认构造函数,但是以上的所有编译器需求的四个场合的调用都会扩展在你书写的所有构造函数中。




例1并不会自动合成构造函数。。

待续(后续会补充拷贝构造和移动构造的详解)。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值