• 2625阅读
  • 3回复

[提问]Qt源码中关于D指针和Q指针相关问题 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 楼主  发表于: 2018-05-25

如题,阅读Qt源码中,遇到关于D指针和Q指针的问题
(主类)QObject中存有d_ptr
(数据对象)QObjectPrivate中存有q_ptr(q_ptr存于父类QObjectData中)
则此时出现互相引用的关系,既如下所示。
QObject
    d_ptr = QObjectPrivate*
QObjectPrivate
    q_ptr = QObject*
1.那Qt是如何处理这2者的关系而保证双方都可以正确释放呢?
2.Qt是处理指针释放的流程? 望解答
离线maxlogo

只看该作者 1楼 发表于: 2018-05-25
q指针不用释放,因为仅仅是这样子q_ptr = this;
d指针会由QScopedPointer智能指针进行释放
而对象本身由Qt的对象树管理机制释放或者由用户自己释放
个人博客:
简书:https://www.jianshu.com/u/14fa805306bd
CSDN:https://blog.csdn.net/qq10097355
思否:https://segmentfault.com/u/lowbees/articles

只看该作者 2楼 发表于: 2018-05-25
回 maxlogo 的帖子
maxlogo:q指针不用释放,因为仅仅是这样子q_ptr = this;
d指针会由QScopedPointer智能指针进行释放
而对象本身由Qt的对象树管理机制释放或者由用户自己释放 (2018-05-25 14:27) 

嗯嗯 大致理解了 感谢
离线jigetage

只看该作者 3楼 发表于: 2018-05-26
回 maxlogo 的帖子
maxlogo:q指针不用释放,因为仅仅是这样子q_ptr = this;
d指针会由QScopedPointer智能指针进行释放
而对象本身由Qt的对象树管理机制释放或者由用户自己释放 (2018-05-25 14:27) 

厉害了
快速回复
限100 字节
 
上一个 下一个