最近我开始研究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
管理的)。
你会如何解决这个问题?也许一切都很明显,我错过了某些非常简单的东西吗?
clear()
调用会释放该内存吗? - Yippie-Ki-Yay