我有一个返回单例的方法。
// 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)
。
有没有办法解决这个问题,或者在我需要与它进行交互时是否必须始终调用我的单例方法?
答案 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();
^