有没有办法为本地范围内的单例分配名称?

时间:2014-10-19 09:06:22

标签: c++ singleton

我有一个返回单例的方法。

// Window.h    
static Window &getSingleton();

// Window.cpp    
Window &Window::getSingleton()
{
    static Window singleton;
    return singleton;
}

来自Objective-C我习惯于将单例分配给本地范围变量名称,例如。

UIApplication *application = [UIApplication sharedApplication];

但是在C++中做类似的事情会导致创建一个新对象。

Window window = Window::getSingleton();

这是因为调用了复制构造函数,在本例中为Window(Window const &windowCopy)

有没有办法解决这个问题,或者在我需要与它进行交互时是否必须始终调用我的单例方法?

1 个答案:

答案 0 :(得分:5)

在C ++中,

Window window = <some expression>

意味着&#34;从Window的值构造<some expression>类型的对象。 Window::getSingleton()求值为Window的左值引用,可用于初始化新的Window对象(Window不可复制的事实除外。)< / p>

您需要做的是参考Window::getSingleton()函数中创建的静态对象。函数本身返回一个引用。您需要做的就是在LHS上使用Window的引用:

Window& window = Window::getSingleton();
      ^