詳しい文脈は忘れてしまったけど、読書会で「C++はデストラクタが弱い」的な話題があがった。 その場はRAII*1使えばいいよ、とだけ言って概要のみ説明しただけだったので補足を。 まずは、RAIIの実例を知ってもらう為に、簡単なサンプルの紹介から。 void write_to_file(const std::vector<std::string>& vec) { std::ofstream fout("out.txt"); std::copy(vec.begin(), vec.end(), std::ostream_iterator<std::string>(fout, "\n")); } このプログラムでは、ファイルストリームのオープンもクローズも明示的に行っていないにもかかわらず、どちらも正しく行われる。 これは、コンストラクタ内部でオープンを行い、デストラクタ内部でクローズを行うことで