Sim*_*der 4 c++ variables static visual-studio-2008
我有一个静态变量的奇怪问题,显然没有按原样进行初始化.
我有一个与Windows和Linux一起运行的庞大项目.由于Linux开发人员没有这个问题,我建议这是某种有线Visual Studio的东西.
头文件
class MyClass
{
// some other stuff here
...
private:
static AnotherClass* const Default_;
};
Run Code Online (Sandbox Code Playgroud)
CPP文件
AnotherClass* const MyClass::Default_(new AnotherClass(""));
MyClass(AnotherClass* const var)
{
assert(Default_);
...
}
Run Code Online (Sandbox Code Playgroud)
问题Default_
始终存在NULL
.我还在初始化该变量时尝试了一个断点,但我无法理解它.
另一个班级也存在类似的问题.
CPP文件
std::string const MyClass::MyString_ ("someText");
MyClass::MyClass()
{
assert(MyString_ != "");
...
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下MyString_
总是空的.所以再次没有初始化.
有没有人对此有所了解?这是Visual Studio设置问题吗?
干杯西蒙
编辑:
我也遇到了静态初始化惨败.但我不确定这是否可能是问题,因为Linux编译器没有问题.在这种情况下编译器不应该以相同的方式做出反应吗?
我建议你使用静态变量而不是静态变量本身的静态成员函数:
class MyClass
{
// some other stuff here
...
private:
static AnotherClass* const getAnotherClass();
};
AnotherClass *const MyClass::getAnotherClass()
{
static AnotherClass *const p = new AnotherClass("");
return(p);
}
Run Code Online (Sandbox Code Playgroud)
该标准保证在第一次调用函数时p被初始化一次,因此您将始终获得正确初始化的对象(除非您已经耗尽内存或构造函数抛出).
请注意 - 这可能是也可能不是线程安全的(实际上取决于您的编译器).
而另一个注意事项 - 现在你必须忍受"内存泄漏",因为它几乎不可能决定何时销毁对象而你没有办法将p重置为NULL.