I noticed that when substituting raw pointers with shared_ptr in QT, my code does not work anymore. For example, if instead of
QTreeWidgetItem* vItem(new QTreeWidgetItem(ItemTitle));
I use
std::shared_ptr<QTreeWidgetItem> vItem(new QTreeWidgetItem(ItemTitle));
then, either the program crashes or nothing is done (even if I use the .get() function to get the raw pointer from the shared one later in my code). Does anybody knows what could be the cause?
Using shared pointer with Qt model items causes an ownership conflict: QTreeWidget
takes ownership of any QTreeWidgetItem
you pass to it. std::shared_ptr
also owns its item. Both assume they can delete the item themselves and that nobody else will delete it behind their back.
In such situations, where Qt takes ownership of the pointers (other example: parent QObject
taking ownership of its children), one cannot use std::shared_ptr
/QSharedPointer
at the same time. std::shared_ptr
only works well when using std::shared_ptr
and std::weak_ptr
exclusively to hold pointers to that particular object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With