【发布时间】:2011-05-28 06:37:07
【问题描述】:
如何在类中更正声明静态向量? 目前我在一行上崩溃了,因为向量初始化太晚了。
样品一:
#include "stdafx.h"
#include <vector>
class A{
private:
int aValue;
public:
static std::vector<A*> listOfA;
A(int i)
{
aValue = i;
A::listOfA.push_back(this); // !!! HERE crash in release mode only, in debug mode items add to vector, but remove when vector initialize
}
};
A testA(1);
std::vector<A*> A::listOfA;
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
示例二:
classA.h
#include <vector>
class A{
private:
int aValue;
public:
static std::vector<A*> listOfA;
A(int i);
};
classA.cpp
#include "stdafx.h"
#include "classA.h"
std::vector<A*> A::listOfA;
A::A(int i)
{
aValue = i;
A::listOfA.push_back(this); // !!! HERE crash in release mode only, in debug mode items add to vector, but remove when vector initialize
}
main.cpp
#include "stdafx.h"
#include "classA.h"
A testA(1);
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
在示例 2 中,如果项目中的 cpp 文件具有此顺序(编译顺序),则一切正常: 类A.cpp main.cpp
如果订购这个,我们就会崩溃: 主文件 类A.cpp
【问题讨论】:
-
我建议阅读更多关于“静态初始化订单惨败”的内容
标签: class visual-c++ vector crash initialization