我有一个类定义在main,另一个类(完整的静态函数/成员)在2个独立的文件中定义的同一个文件,它崩溃。我想这可能与全局/静态实例的生命周期有关。看起来在ctor中,静态成员尚未初始化,并且可能在退出时发生静态成员在第一个实例被破坏之前被释放。 这里是测试代码:C++ globlal/stack实例ctor/dtor崩溃时调用静态函数
//testh.h
#include <map>
class Sc {
public:
static void insert();
static void out();
private:
static std::map<int, int> map_;
};
//testcpp.cpp
#include "testh.h"
#include <iostream>
std::map<int, int> Sc::map_;
void Sc::insert() {
map_.insert(std::make_pair(2,3));
}
void Sc::out() {
for(auto m : map_) {
std::cout << m.first << ' ' << m.second << '\n';
}
}
//main.cpp
#include "testh.h"
class Nc {
public:
Nc() {
Sc::insert();
Sc::out();
}
~Nc() {
Sc::insert();
Sc::out();
}
};
Nc nc;
int main() {
system("pause");
return 0;
}
这里有上述代码的一些奇怪的行为:
如果我更换staic成员为int,它不会崩溃,所以我想可能有问题的std ::地图?
如果我把所有的代码放到main.cpp中,它不会崩溃,但是不会产生相同的代码吗?
如何解决这个问题如果我不想做动态分配(新)?
你有两个'class Sc',一个在main.cpp中另一个在testh.h中? – billz 2013-03-06 08:29:03
我可以保证std中没有任何问题。 – 2013-03-06 08:29:44
@billz它是main.cpp中的另一个类Nc,testcpp.cpp/testh.h中的Sc – Frahm 2013-03-06 08:30:57