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();
文字列にはデストラクタがあるため、契約ではそのリソースを積極的に管理する必要はありません。
では、デストラクタが必須かどうかは気にしないでください。クラスがスコープ外になったときに発生する動作は、デストラクタがない場合に意味がありますか? メモリリークは発生しますか?