具有可变成员的单例对象
Singleton objects with mutable members
编辑:看GWW的回答,问题只是用C::Instance()做了一个非法的拷贝。我错了,错误不依赖于可变。
静态方法与可变方法不兼容吗?下面是我的代码的简化版本:
c.h:
class C
{
public:
static C& Instance();
private:
C();
mutable QMutex _mutex;
};
c.cpp:
C& C::Instance()
{
static C instance;
return instance;
}
C c = C::Instance();
然后我得到的错误(gcc 4.2)是
error: 'QMutex::QMutex(const QMutex&)'在此上下文中是私有的
合成方法'C::C(const C&)'首先需要在这里//在C::Instance()
如果我删除'可变'关键字,这个错误就会消失,但是当然,我不能使锁/解锁_mutex的方法为const。写我自己的拷贝器改变不了什么。有人知道怎么解吗?注:这看起来和这篇文章很相似,但那是objective-C,里面有太多的代码似乎与问题无关。
编辑:刚刚意识到的问题,显然,是QMutex的复制器是私有的。但我不明白为什么"可变"在这里应该有所不同,即为什么它会引起复制。
你试图复制你的单例,但它失败了,因为你已经声明了一个私有的复制构造函数。它与可变成员完全没有关系。
相关文章:
- 为什么在单例中,检查类==空?
- 带有抛入 ctor 的对象的单例 - 再次访问?
- 如何将项目共享"system calls"作为单例对象构建和链接到引导加载程序?
- 使用指针和使用静态对象实现单例实现之间的区别
- 带参数的单例模式对象
- c++中的静态对象与单例类对象
- 派生自单例:基数和派生各一个对象
- 我们是否需要互斥锁来访问 C++11 - 多线程中单例对象中的数据字段
- 此单例对象创建代码中的错误是什么
- 如何正确地创建一个单例对象并在C++中使用它
- 具有可变成员的单例对象
- 非静态成员引用必须相对于特定的c++对象单例类
- c++中的一个单例应用程序对象
- 如何删除单例对象
- 当动态创建的单例对象应该被删除时
- 在初始化列表中创建单例对象会导致访问冲突(仅释放模式)
- 为什么单例是比全局对象更好的选择
- 对单例对象c++使用函数指针
- 单例对象初始化
- C++ 如何删除许多类中使用的单例对象