类static成员的初始化顺序是怎样的?
// 第一个类
const String Environment::NewLine = L"\r\n";
Environment::Environment(void)
{
}
// 第二个类
#include "Console.h"
using namespace System;
TextWriter Console::m_out;
void Console::Write(bool b)
{
}
// 第3个类
#include "TextWriter.h"
using namespace System;
using namespace System::IO;
TextWriter::TextWriter(void) : CoreNewLine(null)
{
SetNewLine(&Environment::NewLine);
}
/////////////////
debug 调用跟踪后,是先初始化 TextWriter Console::m_out;这个对象,然后构造函数回调用Environment::NewLine
这回来了,Environment::NewLine还没有初始化,程序运行到这里就崩溃了
有啥办法能控制类static的成员的初始化?
[解决办法]
没有办法控制,因为顺序不确定
[解决办法]
不同编译单元中的non-local static object的初始化顺序是不确定的,你的问题就是由这个而造成的。解决方法前面也写了,书中写的更详细。
按你的这个来说,就是首先把Environment::NewLine这个变量给去掉,然后在Environment类中增加一个static函数,比如叫GetNewLine,如下:
static const std::string& GetNewLine();