Я недавно начал исследовать Qt для себя и задал следующий вопрос:
Предположим, у меня есть QTreeWidget* widget
.В какой-то момент я хочу добавить некоторые элементы к нему, и это делается с помощью следующего вызова:
QList<QTreeWidgetItem*> items;
// Prepare the items
QTreeWidgetItem* item1 = new QTreeWidgetItem(...);
QTreeWidgetItem* item2 = new QTreeWidgetItem(...);
items.append(item1);
items.append(item2);
widget->addTopLevelItems(items);
Пока все выглядит нормально, но я не понимаю, кто должен контролировать время жизни объектов.Я должен объяснить это на примере :
Допустим, другая функция вызывает widget->clear();
. Я не знаю, что происходит под этим вызовом, но я думаю,эта память, выделенная для item1
и item2
, не удаляется здесь, потому что их собственное владение фактически не передавалось. И, чёрт, у нас утечка памяти.
Вопрос в следующем - есть ли Qt
что предложить в такой ситуации? Я мог быиспользуйте boost::shared_ptr
или любой другой умный указатель и напишите что-то вроде
shared_ptr<QTreeWidgetItem> ptr(new QTreeWidgetItem(...));
items.append(ptr.get());
, но я не знаю, попытается ли сам Qt попытаться сделать явные delete
вызовы моих указателей (что было бы катастрофическим, так какЯ заявляю их как shared_ptr
-управляемые).
Как бы вы решили эту проблему? Может быть, все очевидно, и я что-то упускаю очень просто?