将输出记录到C ++类析构函数中的文件是一个好主意吗?我的用例是一个模拟器,我有一个日志记录类,它记录到内存中的数据结构,然后在它被破坏时将它全部转储到一个文件中。
这与此处的问题类似(C# class: Do logging / housekeeping, should I use a destructor?),但我的问题涉及标准的非垃圾收集C ++,而不是C#。
答案 0 :(得分:2)
也许,但是don't throw exceptions。您应该预料到I / O错误并吞下它们或以其他方式丢弃它们而不会丢弃它们。
答案 1 :(得分:1)
嗯,你可以做到,但我不推荐它。
首先,像这样抽出奇怪的设计特技并不是一个好主意。您可能最终会混淆代码。 析构函数存在的主要目的是释放类已分配的资源,如文件或内存。
另一个问题是例外。如果您尝试在析构函数中添加I / O操作并出现问题,您将无法看到它。因此,假设您拥有这个巨大的应用程序,其中日志至关重要。你可能会错过一个日志。或者更糟糕的是,日志上有意外的数据。
无论如何,我建议你在课堂上添加bool Shutdown()
功能。这就是我在这样的情况下所做的。这样你可以控制正在发生的事情。