default constructor(默认构造函数)
例子1:
class Test
{
int a;
void *p;
};
首先了解一个概念,默认构造函数只有在编译器需要的时候才会自动生成,在程序员需要的情况下是不会自动合成的。
编译器需要默认构造函数的四个场合:
a、类内有自定义类型成员(类成员),并且自定义类型成员带有默认构造函数。
b、基类具有默认构造函数。
b、体现多态特性(只要包含一个虚函数就会体现多态特性),这个时候需要一定需要构造函数去维护自己的虚指针。(注意点:如果某个类体现出多态特性那么他的析构函数一定是虚函数,关联书籍effective C++)。
c、虚继承,虚继承的base subobject的位置不确定也需要构造函数去维护自己的base subobject的位置。
以上四个场合一定会生成默认构造函数去满足编译器的需求。
a、调用类成员的默认构造函数(编译器通过合成的构造函数的初始化列表调用)。
b、调用基类的默认构造函数。
c、初始化虚函数指针。
d、维护虚基类的位置。
*****另外,如果自己书写了任何一个构造函数,编译器就不会再合成一个默认构造函数,但是以上的所有编译器需求的四个场合的调用都会扩展在你书写的所有构造函数中。
例1并不会自动合成构造函数。。
待续(后续会补充拷贝构造和移动构造的详解)。。。