我有一个返回单例的方法。
// 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)
。
有没有办法解决这个问题,还是我必须在需要与之交互时始终调用我的单例方法?
最佳答案
在 C++ 中,
Window window = <some expression>
的意思是“从Window
的值构造一个类型为<some expression>
的对象。Window::getSingleton()
计算为对Window
的左值引用,并且可用于初始化新的Window
”对象(除了Window
不是可复制构造的事实。)
您需要做的是引用Window::getSingleton()
函数中创建的静态对象。函数本身返回一个引用。您需要做的就是在 LHS 上使用对Window
的引用:
Window& window = Window::getSingleton();
^
关于c++ - 有没有办法在本地范围内为单例分配名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26448999/