メインの同じファイルで定義されたクラスと、2 つの別々のファイルで定義された別のクラス (静的関数/メンバーでいっぱい) があり、クラッシュします。これは、グローバル/静的インスタンスの有効期間に関連している可能性があると思います。ctor では、静的メンバーが初期化されていないようで、終了時に、最初のインスタンスが破棄される前に静的メンバーが解放されることがあります。テストコードは次のとおりです。
//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::map に問題があるのではないでしょうか?
すべてのコードを main.cpp に入れるとクラッシュしませんが、これらは同じコードを生成しませんか?
動的割り当て(新規)を行いたくない場合、この問題を解決するにはどうすればよいですか?