面试题答案
一键面试析构函数重载概念
- 在C++中,析构函数不能被重载。析构函数是类的特殊成员函数,其名称与类名相同,但前面加“~”符号,且没有参数和返回值。每个类只能有一个析构函数,如果定义多个会导致编译错误。
析构函数在资源回收方面的作用
- 自动资源管理:当对象生命周期结束时,无论是正常结束(如局部对象离开作用域)还是异常结束,析构函数会自动被调用,从而释放对象所占用的资源,防止内存泄漏等问题。
- 资源清理:对于动态分配的资源(如通过
new
分配的内存)、打开的文件句柄、网络连接等,析构函数提供了一个地方来进行资源的释放和清理操作,确保资源在对象销毁时能被正确处理。
不同资源类型下析构函数资源回收举例
- 动态分配的内存
class MemoryHolder {
public:
MemoryHolder() {
data = new int[10];
}
~MemoryHolder() {
delete[] data;
}
private:
int* data;
};
在上述代码中,MemoryHolder
类的构造函数使用new[]
分配了一个包含10个int
的数组,析构函数使用delete[]
来释放这块动态分配的内存。
- 文件句柄
#include <fstream>
class FileHandler {
public:
FileHandler(const char* filename) {
file.open(filename, std::ios::out);
}
~FileHandler() {
if (file.is_open()) {
file.close();
}
}
private:
std::ofstream file;
};
这里FileHandler
类的构造函数打开一个文件用于输出,析构函数检查文件是否打开,如果打开则关闭文件句柄,从而释放系统资源。