有人可以解釋爲什麼會發生這種情況嗎?我已經寫了以下情況:延遲初始化?
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
(對於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 –