class A{
public:
explicit A(QObject* parent = 0);
~A();
public:
QMutex m_mutex;
};
class B{
public:
explicit B(QObject* parent = 0);
~B();
private:
void initMutex();
void callMutex(A callmtx);
}
void B:initMutex()
{
A avalue;
callMutex(avalue); // 这一步调用了QMutex的隐式拷贝构造
}
如上所示,会出现下图错误
先看下QMutex源码的定义接口
在接口中能看出,QMutex中存在一个隐式拷贝构造Q_DISABLE_CAPY(QMutex)。
当我们传递A类时,默认会拷贝一份A,而A中定义的QMutex则会默认调用Q_DISABLE_COPY(QMutex);
从而造成调用私有成员错误的问题。
本文探讨了在C++中使用QMutex时遇到的一个常见问题:由于QMutex禁止拷贝构造,当尝试通过值传递含有QMutex成员的类时会导致编译错误。文章通过具体示例说明了这一问题,并引用了QMutex的源码定义来解释为何会出现该错误。
814

被折叠的 条评论
为什么被折叠?



