有关 Qt 变量指针的存储

chen_freecom 2013-07-02 10:30:49
经常看到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做这种处理?有什么好处?
...全文
157 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,212

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧