最近、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");
EDIT 2:logFileName
これはinの定義ですGlobals
:
static const std::string logFileName = "errorLog.log";