编译器会为每个类生成一个默认的无参的构造函数(这句话是不严谨的)
代码示例:
class Person {
public:
int m_age;
};
下面写法并不会生成构造函数
Person person;
C++的编译器在某些特定的情况下,会给类自动生成无参的构造函数,比如
成员变量在声明的同时进行了初始化
int m_age = 0;
有定义虚函数
class Person {
public:
// 在构造函数里面,会分配虚表内存地址
virtual void run() {
}
};
虚继承了其他类
class Person {
public:
};
class Student : virtual public Person {
};
包含了对象类型的成员,且这个成员有构造函数(编译器生成或自定义)
class Person {
public:
Person() {
}
};
class Student : public Person {
Person person;
};
或者
class Person {
// 默认编译器会生成构造函数
int m_age = 0;
public:
};
class Student : public Person {
Person person;
};
父类有构造函数(编译器生成或自定义)
总结一下 :对象创建后,需要做一些额外操作时(比如内存操作、函数调用),编译器一般都会为其自动生成无参的构造函数