Qt raw vs std :: shared_ptr

IST*_*STB 4 c++ qt shared-ptr c++11

我注意到在QT中用shared_ptr替换原始指针时,我的代码不再起作用了.例如,如果不是

 QTreeWidgetItem* vItem(new QTreeWidgetItem(ItemTitle));
Run Code Online (Sandbox Code Playgroud)

我用

 std::shared_ptr<QTreeWidgetItem> vItem(new QTreeWidgetItem(ItemTitle));
Run Code Online (Sandbox Code Playgroud)

然后,程序崩溃或没有任何操作(即使我使用.get()函数在我的代码中稍后从共享的指针获取原始指针).有谁知道原因是什么?

Fra*_*eld 11

对Qt模型项使用共享指针会导致所有权冲突:QTreeWidget取得QTreeWidgetItem您传递给它的任何所有权.std::shared_ptr也拥有它的项目.两者都假设他们可以自己删除该项目,并且没有其他人会将其删除.

在这种情况下,Qt取得指针的所有权(其他例子:父QObject取得其子女的所有权),不能同时使用std::shared_ptr/ QSharedPointer.std::shared_ptr只有在使用std::shared_ptrstd::weak_ptr专门保存指向该特定对象的指针时才能正常工作.

  • "在罗马的时候..." (4认同)