首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

类static成员的初始化顺序是怎样的?解决方法

2012-02-13 
类static成员的初始化顺序是怎样的?// 第一个类const String Environment::NewLine L\r\nEnvironment

类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,如下:

C/C++ code
static const std::string& GetNewLine(); 

热点排行
Bad Request.