面试题答案
一键面试-
默认构造函数:
- 默认行为:默认构造函数会对类的成员变量进行默认初始化。对于内置类型(如
int
),如果是类的非静态成员变量且在类中没有显式初始化,默认构造函数不会对其进行初始化,它的值是未定义的。对于用户定义类型的成员变量,会调用其默认构造函数进行初始化。 - 对于
MyClass
:由于data
是int
类型,在没有显式初始化的情况下,其值未定义。编译器生成的默认构造函数不会对data
进行任何初始化。
- 默认行为:默认构造函数会对类的成员变量进行默认初始化。对于内置类型(如
-
默认析构函数:
- 默认行为:默认析构函数执行与构造函数相反的操作,它会自动调用类中所有成员变量的析构函数(如果成员变量是用户定义类型),并释放对象占用的资源(如堆内存等,如果有通过
new
等动态分配的资源)。对于内置类型成员变量,不执行任何特殊操作。 - 对于
MyClass
:因为MyClass
只有一个int
类型成员变量data
,没有需要释放的特殊资源,编译器生成的默认析构函数不会执行任何显式操作。
- 默认行为:默认析构函数执行与构造函数相反的操作,它会自动调用类中所有成员变量的析构函数(如果成员变量是用户定义类型),并释放对象占用的资源(如堆内存等,如果有通过
-
默认拷贝构造函数:
- 默认行为:默认拷贝构造函数执行成员变量的逐成员拷贝(浅拷贝)。对于内置类型的成员变量,直接进行值拷贝;对于用户定义类型的成员变量,调用其拷贝构造函数进行拷贝。
- 对于
MyClass
:编译器生成的默认拷贝构造函数会将源对象的data
成员的值直接拷贝到目标对象的data
成员中。
-
默认赋值运算符重载函数:
- 默认行为:默认赋值运算符重载函数执行成员变量的逐成员赋值(浅赋值)。对于内置类型的成员变量,直接进行值赋值;对于用户定义类型的成员变量,调用其赋值运算符重载函数进行赋值。它首先会检查是否是自我赋值(
this
指针与传入参数指针是否相同),如果是则直接返回*this
。 - 对于
MyClass
:编译器生成的默认赋值运算符重载函数会将右侧对象的data
成员的值赋给左侧对象的data
成员。
- 默认行为:默认赋值运算符重载函数执行成员变量的逐成员赋值(浅赋值)。对于内置类型的成员变量,直接进行值赋值;对于用户定义类型的成员变量,调用其赋值运算符重载函数进行赋值。它首先会检查是否是自我赋值(