在析构函数中记录

Logging within a destructor

在 C++ class 析构函数中将输出记录到文件中是个好主意吗?我的用例是一个模拟器,其中我有一个日志记录 class,它记录到内存中的数据结构,然后在它被破坏时将其全部转储到一个文件中。

这类似于这里的问题 (C# class: Do logging / housekeeping, should I use a destructor?),但我的问题涉及标准的非垃圾收集 C++,而不是 C#。

也许吧,但是 don't throw exceptions。您应该预见 I/O 错误并吞下它们或以其他方式处理它们而不抛出。

你可以做,但我不推荐。

首先,像那样搞怪异的设计噱头可不是个好主意。您可能最终会混淆您的代码。 析构函数存在的主要目的是释放您的 class 已分配的资源,例如文件或内存。

另一个问题是异常。如果你试图在你的析构函数中添加一个 I/O 操作并且出现问题,你将无法看到它。因此,假设您拥有一个日志至关重要的大型应用程序。你可能会错过一个日志。或者更糟的是,日志中有意外数据。

无论如何,我建议您在 class 中添加一个 bool Shutdown() 功能。这就是我在这种情况下所做的。这样你就可以控制正在发生的事情。

希望我有所帮助。