我有一段这样的代码结构:
a.cpp:
#include "b.hpp"
const unsigned a = create(1);
b.cpp:
map<int, string> something; // global variable
unsigned create(unsigned a){
something.insert(make_pair(a, "somestring"));
return a;
}
现在,这引发了段错误,valgrind说尚未创建地图。它是如何工作的,我应该如何更改?
C ++没有定义在程序启动期间构造全局变量的顺序。a
可以在something
构造之前先进行初始化,这将导致上述问题。当您开始构造依赖于要初始化的其他全局变量的全局变量时,就会遇到经典的静态初始化顺序fiasco。
解决上述情况的一种简单方法是something
将其静态化并将其移入您的create
函数中。
unsigned create(unsigned a)
{
static map<int, string> something;
something.insert(make_pair(a, "somestring"));
return a;
}
这样可以确保something
在首次调用时被创建create
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句