c++ - 有没有办法在本地范围内为单例分配名称?

标签 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)

有没有办法解决这个问题,还是我必须在需要与之交互时始终调用我的单例方法?

最佳答案

在 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/

相关文章:

c++ - 我可以在 C++ 中按值返回数组吗?

c++ - 在 Qt 中调整带有大图像的小部件的大小的常用习惯是什么?

c++ - 迈耶斯单例范围

c++ - 单例:应该如何使用

c# - 通用单例<T>

android sharedPreferences 的清除功能不起作用

c++ - 如果是 Singleton 类,我应该如何编写复制构造函数,我应该如何重载 = 运算符?

c++ - 内存处理问题

c++ - visual studio 2013 部署一个项目

c++ - 如何将抽象信号连接到接口(interface)构造函数中的插槽?