有没有一种方法可以为本地作用域中的单例分配名称

Is there a way to assign a name to a singleton in the local scope?

本文关键字:作用域 单例 分配 一种 方法 有没有      更新时间:2023-10-16

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

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

例如,来自Objective-C的我习惯于将singleton分配给局部作用域变量名。

UIApplication *application = [UIApplication sharedApplication];

但是在C++中执行类似的操作会导致创建一个新对象。

Window window = Window::getSingleton();

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

有没有办法解决这个问题,或者当我需要与singleton方法交互时,我必须总是调用它?

在C++中,

Window window = <some expression>

意思是类似于"从<some expression>的值构造Window类型的对象。Window::getSingleton()计算为对Window的左值引用,可用于初始化新的Window对象(Window不可复制构造的事实除外)。"

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

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