关于“有用的”Default Constructor的合成

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

本文主要关注构造函数。

那么,什么时候才会合成出一个“有用的”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++对象模型》 侯捷 译