当这些容器被破坏时,如何删除这些动态分配的对象
How can I delete these dynamically allocated objects when their container is destructed?
我有一个指向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_ptr
或unique_ptr
在您的呼叫释放或范围之外时,将清理您的内存。当他们脱离范围时,击路仪将为您清理所有记忆和参考计数。这也取决于mFileModel
是什么,以及您如何设计模型。
相关文章:
- 迭代时从向量和内存中删除对象
- C++从对象自己的类中删除对象
- 如何通过对象的类属性删除对象,并返回其对象值?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 从列表C++中删除对象
- c++ 循环访问对象列表并删除对象
- 从对象本身的容器中删除对象
- 从尝试引用已删除函数的矢量 C++ 中删除对象
- 如何通过指向元组的共享指针删除对象
- 防止通过接口删除对象
- 在 c++ 中从内存中删除对象
- 当对象被删除时,复制被删除对象的对象如何
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 从内存中删除对象
- 通过C++中的删除方法自行删除对象
- C++ - 析构函数只是释放内存还是实际删除对象
- 如何通过存储在 std::list 中的指针删除对象?
- 如何通过对象参数从指针矢量中删除对象和指针
- 我可以删除对象的右值版本的函数吗?
- 使用对象的索引从矢量中删除对象