我試圖讓一個int到int地圖,程序崩潰,我不明白爲什麼。 我總結了這個簡短的代碼的問題。C++:性病::地圖<int,int>崩潰時被分配
當程序啓動時,由於Utilities成員_instance是靜態的,它通過轉到它的構造函數初始化它,它包含一行:int int(簡單)映射賦值。但它然後崩潰。
注意,如果我評論該行,該程序不會崩潰, 並且主要包含了非常同一行。 所以我的兩個問題是:
1)爲什麼它會崩潰?這種行爲背後有一點意義嗎?
2)如何解決它,所以我可以初始化在構造函數中的地圖嗎?
謝謝
#include <map>
class Utilities
{
public:
~Utilities(){};
static Utilities& instance();
private:
Utilities();
Utilities(const Utilities&){};
static Utilities _instance;
static std::map<int, int> textIntToIntMap;
};
Utilities Utilities::_instance = Utilities();
std::map<int, int> Utilities::textIntToIntMap;
Utilities::Utilities()
{
//The following line crashes, why?
textIntToIntMap[1] = 2;
}
int main()
{
static std::map<int, int> text2;
text2[4] = 2;
int xxx = 3;
}
有真的在*定義*對於一個單獨的類拷貝構造函數是沒有意義的。如果有的話,你只想聲明它,但不定義它,明確地禁止複製。 –