C++:如何摆脱懒惰的初始化



要记录错误,我有以下代码可以调用:

void writeErrorToLog(const LogMessage& message)
    {
        static std::ofstream logFile(ERROR_LOG_FILEPATH, std::ofstream::out | std::ofstream::trunc);
        logFile << message.getLogMessage();
        logFile.flush();
    }

因此,在程序关闭后,日志文件包含上次运行期间发生的所有错误。除非没有出现错误,否则这项工作正常。在没有错误的情况下,日志文件包含上次运行之前的错误,因为由于延迟初始化,该文件从未打开(使用trunk选项)。有什么方法可以强制初始化静态变量吗?

这样的东西怎么样:

class Log
{
    private:
       std::ofstream _logFile;
    public:
       Log()
       : _logFile(ERROR_LOG_FILEPATH, std::ofstream::out | std::ofstream::trunc)
       {
       }
       void writeErrorToLog(const LogMessage& message)
       {
           _logFile << message.getLogMessage();
           _logFile.flush();
       }
}

然后您可以使用这个类的一个实例(应用singleton模式)。每当类被实例化时,无论是否有错误,它都会截断文件。

您也可以将_logFile成员设置为静态:

class Log
{
    private:
       static std::ofstream _logFile;
    public:
       static void writeErrorToLog(const LogMessage& message)
       {
           _logFile << message.getLogMessage();
           _logFile.flush();
       }
}
// In cpp
std::ofstream Log::_logFile(ERROR_LOG_FILEPATH, std::ofstream::out | std::ofstream::trunc);

这样你就可以这样访问它:

Log::writeErrorToLog(...)

相关内容

  • 没有找到相关文章

最新更新