gpt4 book ai didi

class - 在同一类构造函数中初始化静态std::vector 的问题

转载 作者:行者123 更新时间:2023-12-03 16:16:47 25 4
gpt4 key购买 nike

如何在类中正确声明静态 vector ?
目前我在一行上崩溃,因为 vector 初始化太晚了。

示例一:

#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;
}

样本两个:

A类
#include <vector>

class A{
private:
int aValue;
public:
static std::vector<A*> listOfA;

A(int i);
};

A类
#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类
main.cpp

如果订购此产品,我们将当机:
main.cpp
A类

最佳答案

静态元素按照它们在文件中出现的顺序进行初始化,因此当您说:

A testA(1);
std::vector<A*> A::listOfA;

第一个静态变量已初始化,但其构造函数尝试使用第二个静态变量,但结果 undefined 。

如果静态文件位于不同的文件中,则初始化顺序不确定,因此,如果运气好的话,它似乎可以工作。通常,不要编写依赖于静态初始化顺序的代码。

关于class - 在同一类构造函数中初始化静态std::vector <class>的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6160083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com