我自己搭建了博客,以后可能不太在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++对象模型》 侯捷 译
2018-12-10 北京 海淀
Reference: 《深度探索C++对象模型》 侯捷 译