有人可以解释为什么会发生这种情况吗?我已经写了以下情况:延迟初始化?
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 –