面试题答案
一键面试析构函数重载概念
在C++中,析构函数不能被重载。每个类只能有一个析构函数。析构函数的名称与类名相同,但前面加上波浪号 ~
。它在对象销毁时自动调用,用于释放对象所占用的资源。
对资源管理的影响
由于析构函数不能重载,所以不存在因析构函数重载而对资源管理产生不同行为的情况。但析构函数在资源管理方面至关重要,它确保在对象生命周期结束时,相关资源(如内存、文件句柄等)被正确释放,防止资源泄漏。
举例说明
- 内存资源管理
#include <iostream>
class MemoryResource {
private:
int* data;
public:
MemoryResource() {
data = new int[10];
std::cout << "Memory allocated" << std::endl;
}
~MemoryResource() {
delete[] data;
std::cout << "Memory deallocated" << std::endl;
}
};
int main() {
MemoryResource mr;
return 0;
}
在上述代码中,MemoryResource
类在构造函数中分配了一块内存,在析构函数中释放了这块内存。如果析构函数不存在或者没有正确释放内存,就会导致内存泄漏。
- 文件资源管理
#include <iostream>
#include <fstream>
class FileResource {
private:
std::ofstream file;
public:
FileResource(const char* filename) {
file.open(filename);
std::cout << "File opened" << std::endl;
}
~FileResource() {
if (file.is_open()) {
file.close();
std::cout << "File closed" << std::endl;
}
}
};
int main() {
FileResource fr("test.txt");
return 0;
}
在这个例子中,FileResource
类在构造函数中打开一个文件,在析构函数中关闭文件。如果没有析构函数关闭文件,可能会导致文件资源未释放,影响文件的正常使用及系统资源管理。