静态方法是否与可变方法不兼容?这是我的代码的简化版本:
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)是
错误:'QMutex :: QMutex(const QMutex&)'在此上下文中是私有的
首先需要合成方法'C :: C(const C&)'//在C :: Instance()
如果我删除'mutable'关键字,这个错误会消失,但当然我无法制作锁定/解锁_mutex const的方法。编写我自己的副本ctor并没有改变任何东西。有谁知道如何解决这个问题?注意这看起来类似于this post,但这是客观的C,那里的代码太多,似乎与问题无关。
编辑:刚才意识到问题显然是QMutex的复制版本是私有的。但我不明白为什么'可变'应该在这里有所作为,即为什么它会诱导副本。
答案 0 :(得分:3)
您正在尝试复制单件,但由于您已将复制构造函数声明为私有,因此失败。它与可变成员完全无关。