誰かがなぜこれが起こるか説明していただけますか?初期化が遅れましたか?
1)シングルトンとして実装などのように定義Instance()
方法、有しているウィンドウマネージャクラス:
static WindowManager * instance_;
//...
WindowManager * WindowManager::instance_ = 0;
WindowManager & WindowManager::Instance()
{
if (!instance_)
instance_ = new WindowManager();
return *instance_;
}
2)新たに参照を返すWindowManager::createWindow
方法を私は次のように書かれていますそうのように定義さ作成ウィンドウ:
Window & WindowManager::createWindow()
{
windows_.push_back(Window());
return windows_.at(windows_.size() - 1);
}
3)ウィンドウ内のメッセージを出力しWindow::print
方法
私の主なプログラムでは、私は次のように書いています:
ui::Window & win1 = ui::WindowManager::Instance().createWindow();
ui::Window & win2 = ui::WindowManager::Instance().createWindow();
win1.print("First window");
win2.print("Second window");
これは動作しません! print
への2回目の呼び出しのみが実行されます(win2
)。しかし 、そのように私は、順序を変更した場合:予想通り
ui::Window & win1 = ui::WindowManager::Instance().createWindow();
win1.print("First window");
ui::Window & win2 = ui::WindowManager::Instance().createWindow();
win2.print("Second window");
はその後、すべての作品。このような状況で誰かが何らかの光を当てることができれば、どんな助けでも大いに感謝されます。
問題は、 'createWindow'ではスタック上に作成されたオブジェクトへの参照を返しています。このオブジェクトへの参照は、メソッドの終了時に破棄されます。 'windows_'を' std :: vector'から 'std :: vector 'に変更し、それ以外のものを修正することで私の問題は解決しました。 –
それはあなたの原因ではないが、それは実際の問題を解決するだろう –
これをお読みください:http://stackoverflow.com/questions/1008019/c-singleton-design-pattern/1008289#1008289 –