编译器会为每个类生成一个默认的无参的构造函数(这句话是不严谨的)

代码示例:

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;
};

父类有构造函数(编译器生成或自定义)

总结一下 :对象创建后,需要做一些额外操作时(比如内存操作、函数调用),编译器一般都会为其自动生成无参的构造函数