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);
从而造成调用私有成员错误的问题。