面试题答案
一键面试构造函数和析构函数的作用
-
构造函数的作用 构造函数是类中的一种特殊成员函数,其名称与类名相同。它的主要作用是在创建对象时初始化对象的成员变量。通过构造函数,可以为对象的各个成员变量赋初值,确保对象在创建后就处于一个有效的状态。例如,对于
Student
类,构造函数可以用来初始化姓名和年龄等成员变量。 -
析构函数的作用 析构函数也是类中的特殊成员函数,其名称为类名前加波浪号
~
。它的作用是在对象销毁时进行清理工作。比如,当对象占用了动态分配的内存(如使用new
分配的内存),析构函数可以释放这些资源,防止内存泄漏。对于Student
类,如果有动态分配的资源(如动态分配的字符串用于存储姓名),析构函数就可以释放这些资源。
代码示例
#include <iostream>
#include <cstring>
class Student {
private:
char *name;
int age;
public:
// 构造函数
Student(const char *n, int a) {
name = new char[strlen(n) + 1];
strcpy(name, n);
age = a;
std::cout << "Student object created: " << name << ", " << age << std::endl;
}
// 析构函数
~Student() {
delete[] name;
std::cout << "Student object destroyed: " << name << ", " << age << std::endl;
}
};
对象创建和销毁过程中构造函数和析构函数的工作方式
-
对象创建过程 当使用
Student s("Alice", 20);
这样的语句创建一个Student
对象时,构造函数会被自动调用。首先,为对象分配内存空间,然后执行构造函数中的代码。在上述代码中,构造函数动态分配内存用于存储姓名,然后将传入的姓名和年龄赋值给相应的成员变量,并输出创建信息。 -
对象销毁过程 当对象的生命周期结束时(例如函数结束,对象是局部变量;或者使用
delete
释放动态分配的对象),析构函数会被自动调用。在上述代码中,析构函数首先释放动态分配的用于存储姓名的内存,然后输出销毁信息。如果没有正确编写析构函数,动态分配的内存就无法释放,导致内存泄漏。