我有一個類定義在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