gpt4 book ai didi

c++ - 使用 QStandardItem 传输自定义数据 (Type*) 时内存泄漏?

转载 作者:行者123 更新时间:2023-11-30 03:56:01 24 4
gpt4 key购买 nike

我有一个 QTreeView 以及填充模型的关联 QStandardItemModel 和 QStandardItem。然后我还有一个连接到模型上的 clicked(QModelIndex) 并做一些事情的槽函数。在构建模型时,我想将一些自定义数据传递给 QStandardItem,以便槽函数可以使用它做一些事情。我设法通过描述的方法使它工作 here .

但是,我担心此方法可能会发生内存泄漏以及如何处理。如果它确实泄漏了,我不能将它从关联的插槽函数中删除,因为 View 仍然存在并且用户可能会再次单击相同的项目(然后指向 NULL 引用)并且我不完全确定可能的方法来包含由于与 Q_DECLARE_METATYPE(Object*) 宏的关系以及如何将数据设置为 QStandardItemto

,因此指针具有智能指针

如果没有关联的delete,这会导致内存泄漏吗?如果是,解决这个问题的最佳方法是什么?

最佳答案

如果您将指针声明为元类型,Qt 将在内部单独管理该指针,因此您有责任确保对象在适当的时候被删除(通过手动删除它并清除对它的引用或将父对象分配给它并确保删除父项。您可以通过使用基于值的元类型来避免内存泄漏,例如 Q_DECLARE_METATYPE(MyClass) 。但是 MyClass 应该具有复制构造函数,所以 QObject 不会。您也可以使用共享指针: Q_DECLARE_METATYPE(QSharedPointer<QObject*>) 。 Qt 将在内部保留共享指针并在删除适当的 View 项时删除它们,因此如果您的代码不包含指向它的其他共享指针,则底层对象将被删除。请参阅 QSharedPointer 文档以了解如何正确使用它。

关于c++ - 使用 QStandardItem 传输自定义数据 (Type*) 时内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28704806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com