在析构函数中记录
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()
功能。这就是我在这种情况下所做的。这样你就可以控制正在发生的事情。
希望我有所帮助。
在 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()
功能。这就是我在这种情况下所做的。这样你就可以控制正在发生的事情。
希望我有所帮助。