有关 Qt 变量指针的存储
经常看到Qt存储一个变量的步骤, 如QReadLocker:
1.定义成员变量 quintptr q_val;
2.构造函数中
QReadLocker::QReadLocker(QReadWriteLock *areadWriteLock)
: q_val(reinterpret_cast<quintptr>(areadWriteLock))
{
Q_ASSERT_X((q_val & quintptr(1u)) == quintptr(0),
"QReadLocker", "QReadWriteLock pointer is misaligned");
relock();
}
3.inline void relock()
{
if (q_val) {
if ((q_val & quintptr(1u)) == quintptr(0u)) {
readWriteLock()->lockForRead();
q_val |= quintptr(1u);
}
}
}
4.inline void unlock()
{
if (q_val) {
if ((q_val & quintptr(1u)) == quintptr(1u)) {
q_val &= ~quintptr(1u);
readWriteLock()->unlock();
}
}
}
------------------------------------
问题是 为什么要对q_val做这种处理?有什么好处?