析构函数中的日志记录
Logging within a destructor
将输出记录到C++类析构函数中的文件是个好主意吗?我的用例是一个模拟器,其中我有一个日志记录类,该类记录到内存中的数据结构,然后在销毁时将其全部转储到文件中。
这类似于这里的问题(C# 类:做日志记录/内务管理,我应该使用析构函数吗?),但我的问题涉及标准的非垃圾收集C++,而不是 C#。
也许吧,但不要抛出异常。 您应该预测 I/O 错误并吞下它们或以其他方式处置它们而不抛出它们。
好吧,
你可以这样做,但我不推荐它。
首先,像这样拉奇怪的设计噱头不是一个好主意。您最终可能会混淆您的代码。析构函数存在的主要目的是解除分配类已分配的资源,如文件或内存。
另一个问题是例外。如果尝试在析构函数中添加 I/O 操作,但出现问题,则无法看到它。因此,假设您有一个巨大的应用程序,其中日志至关重要。您可能会错过日志。或者更糟糕的是,日志上有意外的数据。
无论如何,我建议您在类中添加一个bool Shutdown()
函数。这就是我在这样的情况下所做的。这样你就可以控制正在发生的事情。
希望我有帮助。
相关文章:
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- C++ 中混合二进制/文本日志记录的最佳做法
- 轻松日志记录++如何避免多个初始化
- 使用字符串流加速 std::cout 日志记录
- 我的游戏引擎的 spdlog 日志记录出现奇怪的"unresolved external symbol"错误
- 从动态加载的库中记录日志
- 使用 #define 进行跟踪日志记录以避免性能问题
- 如何在代码中启用/禁用 spdlog 日志记录?
- 我正在尝试用 c++ 制作一个日志记录框架,但信息没有传递给记录器的子组件,我做错了什么?
- 使用 Python、ROS 和 C++ 进行日志记录
- C++日志记录类实例标识符
- 如何在C++中重载<<线程安全日志记录的运算符?
- 在 C++17 中将无限参数传递给日志记录函数
- 配置 log4cpp 日志记录级别优先级
- C++同时记录到控制台和日志文件
- 如何使用 Boost V2 1.70 日志记录库在第一个索引(例如 logtrail01.txt)保留最新的日志文件名?
- 如何将日志记录写入Visual Studio输出窗口?
- 使用现有日志记录库 (C++) 限制日志大小
- Log4cpp重复记录日志
- 当触发异常时,应该如何记录日志