析构函数中的日志记录

Logging within a destructor

本文关键字:记录 日志 析构函数      更新时间:2023-10-16

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

这类似于这里的问题(C# 类:做日志记录/内务管理,我应该使用析构函数吗?),但我的问题涉及标准的非垃圾收集C++,而不是 C#。

也许吧,但不要抛出异常。 您应该预测 I/O 错误并吞下它们或以其他方式处置它们而不抛出它们。

好吧,

你可以这样做,但我不推荐它。

首先,像这样拉奇怪的设计噱头不是一个好主意。您最终可能会混淆您的代码。析构函数存在的主要目的是解除分配类已分配的资源,如文件或内存。

另一个问题是例外。如果尝试在析构函数中添加 I/O 操作,但出现问题,则无法看到它。因此,假设您有一个巨大的应用程序,其中日志至关重要。您可能会错过日志。或者更糟糕的是,日志上有意外的数据。

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

希望我有帮助。