我最近在 Visual C++ 2010 中编写了一个非常简单的记录器类,但是我遇到了一个问题。每次我运行程序时,都会出现调试断言失败。
Expression: _CrtIsValidHeapPointer(pUserData)
这就是我的课程的样子(基本上它只是从C++ Singleton design pattern的答案中稍微修改了一下):
class Logger
{
public:
// Returns static instance of Logger.
static Logger& getInstance()
{
static Logger logger; // This is where the assertion raises.
return logger;
}
void logError(std::string errorText);
// Destructor.
~Logger();
private:
std::ofstream logFileStream;
// The constructor is private to prevent class instantiating.
Logger();
// The copy constructor and '=' operator need to be disabled.
Logger(Logger const&) { };
Logger& operator=(Logger other) { };
};
构造函数是:
Logger::Logger()
: logFileStream(Globals::logFileName, std::ios_base::trunc)
{
// (Tries to open the file specified in Globals for (re)writing.)
}
我发现我可以通过某种方式使用静态变量或方法来解决它,但我不明白这段代码有什么问题。有谁知道,问题出在哪里?
编辑:仅供参考,调用此代码时会引发故障(第一次):
Logger::getInstance().logError("hello");
编辑 2:这是logFileName
in的定义Globals
:
static const std::string logFileName = "errorLog.log";