gpt4 book ai didi

c++ - 返回 QList 的函数

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:12 24 4
gpt4 key购买 nike

我有以下类(class)

class LMJEntity : public QObject
{
Q_OBJECT
Q_PROPERTY(int Id READ getId WRITE setId)
};

class LMJDataMapper : public QObject
{
Q_OBJECT

virtual QList<LMJEntity *> *findAll(LMJPaging *paging){
QList<LMJEntity *> * result = NULL;
QSqlQuery query;
bool ret;
ret = query.exec(sql);

if(!ret){
errors = query.lastError().text();
}else
{
result = new QList<LMJEntity *>();
while(query.next()){
result->append(load(query));
}
}

return result;
}
};

这是使用 QList 的正确方法吗?我应该使用 QSharedPointer 而不是原始指针来避免内存泄漏吗?请给我一些建议。

最佳答案

如果 QList 实例本身是一个普通指针,那么在 QList 中使用 QSharedPointer 是没有意义的。一旦松开指向 QList 的指针,就会松开列表内共享指针分配的所有内存。

不必通过指针传递QList 和所有Qt 容器类,包括QString。它们在内部使用共享指针,因此从性能角度来看传递 QList 与传递 QList* 或多或少相同(参见 http://doc.qt.io/qt-5/implicit-sharing.html )。

是否使用QSharedPointers来包装LMJEntity是具体用法的问题。无论如何,它不会造成伤害。您的 LMJEntity 类派生自 QObject。 QObjects 和他们的 parent 一起被自动删除。因此,如果您为您的 LMJEntity 实例提供父级,则它们不需要共享指针。

否则,它们将成为应用程序的子项,并且永远不会被删除。不仅如此,它们永远不会被任何内存泄漏检查软件检测为内存泄漏。

关于c++ - 返回 QList 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29481392/

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