当这些容器被破坏时,如何删除这些动态分配的对象

How can I delete these dynamically allocated objects when their container is destructed?

本文关键字:删除 对象 何删除 动态分配      更新时间:2023-10-16

我有一个指向qstandardems的指针qlist,我将其附加到用于qtableView的qstandarditemmodel上。我希望在filelistView被破坏时删除QStandArdItems和moddatafile。实现这一目标的最佳方法是什么?

foreach (QString fileName, fileList)
{
    MODDataFile *file = new MODDataFile(dir.filePath(fileName)); 
    QList<QStandardItem*> row;
    QStandardItem *item = new QStandardItem();
    item->setData(QVariant::fromValue(file));
    row.append(item);
    row.append(new QStandardItem(file->mUserInfo["TestID"])); 
    row.append(new QStandardItem(fileName));
    row.append(new QStandardItem(file->mTimeAndLocation["Date"]));
    mFileModel.appendRow(row);
}
ui->fileListView->setModel(&mFileModel);

我尝试仅使用qstandardItem对象而不是指针,但是qstandarditemmodel :: appendrow()服用 QList<QStandardItem*>。文件是一个指针,因为它们是大型类,我想将它们传递到其他类。

您可以替换这些代码的这些行:

MODDataFile *file = new MODDataFile(dir.filePath(fileName)); 
QList<QStandardItem*> row;
QStandardItem *item = new QStandardItem();
item->setData(QVariant::fromValue(file));
row.append( item );
row.append(new QStandardItem(file->mUserInfo["TestID"])); 
row.append(new QStandardItem(fileName));
row.append(new QStandardItem(file->mTimeAndLocation["Date"]));
mFileModel.appendRow(row);

with:

std::shared_ptr<MODDataFile> file = std::make_shared<MODDataFile>();
QList<std::shared_ptr<QStarndardItem>> row;
std::shared_ptr<QStandardItem> item = std::make_shared<QStandardItem>();
item->setData(QVariant::fromValue(file));
row.append( item );
row.append( std::shared_ptr<QStandardItem>( new QStandardItem( file->mUserInfo["TestID"])));
row.append( std::shared_ptr<QStandardItem>( new QStandardItem(filename));
row.append( std::shared_ptr<QStandardItem>( new QStandardItem(file->mTimeAndLocation["Data"])));
mFileModel.appendRow(row);

使用shared_ptrunique_ptr在您的呼叫释放或范围之外时,将清理您的内存。当他们脱离范围时,击路仪将为您清理所有记忆和参考计数。这也取决于mFileModel是什么,以及您如何设计模型。