我注意到,当在 QT 中用 share_ptr 替换原始指针时,我的代码不再起作用。
例如,如果不是
QTreeWidgetItem* vItem(new QTreeWidgetItem(ItemTitle));
I use
std::shared_ptr<QTreeWidgetItem> vItem(new QTreeWidgetItem(ItemTitle));
然后,要么程序崩溃,要么什么都不做(即使我使用 .get() 函数来获取
来自我代码中稍后共享的原始指针)。有谁知道可能是什么原因?
对 Qt 模型项使用共享指针会导致所有权冲突:QTreeWidget
取得任何所有权QTreeWidgetItem
你传递给它。std::shared_ptr
也拥有它的物品。两者都假设他们可以自己删除该项目,并且没有其他人会在他们背后删除该项目。
在这种情况下,Qt 获得指针的所有权(其他示例:父级QObject
取得其孩子的所有权),不能使用std::shared_ptr
/QSharedPointer
同时。std::shared_ptr
仅在使用时效果良好std::shared_ptr
and std::weak_ptr
专门用于保存指向该特定对象的指针。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)