析构函数不是强制性的,除非您尝试开发 RAII 或好的代码。
如果你不包含析构函数,那么你会给使用你的类的人带来负担:他们需要知道你没有析构函数,并且他们必须在让它们超出范围或销毁它们之前删除节点.
考虑“ifstream”类。
void function(const char* filename) {
if (!haveReadFile) {
ifstream file(filename); // create 'file' and open filename.
if (file.good()) { // file opened.
readFile(file);
haveReadFile = true;
}
}
// .. other stuff.
}
我们不需要在这里执行“file.close()”或进行任何其他清理。这一切都封装在我们与 istream 签订的合同中。当对象离开时,它做了正确的事情。
与 "std::string" 类似——你不必这样做
std::string greeting = "Hello, ";
greeting += username;
std::cout << greeting << std::endl;
greeting.freeMemory();
因为字符串有析构函数,所以合约不需要你主动管理它的资源。
所以:不管析构函数是否是强制性的——如果没有析构函数,当你的类超出范围时发生的行为是否有意义?会不会有内存泄漏?