请帮助我理解这个案例:
我在一个将数据存储到 struct
的 vector
的项目中工作,我的目标是让它们保持事件状态,直到我调用一个函数来处理数据,然后删除它们在队列中。但我的问题是,如果我使用 new
运算符分配 struct
,我不知道如何安全地删除 vector 中的元素。
例子:
//definition of truct
struct MData {
int dHeight;
int dWidth;
};
//definition of queue
std::vector< MData* > dataQueue;
这是我在队列中存储数据的方式:
//when got the data
MData* mData = new MData;
mData->dHeight = sourceHeight;
mData->dWidth = sourceWidth;
//Then put it in the queue
dataQueue.push_back( MData);
计算完后,我要删除队列中的第一个元素
那么我应该使用什么方法:delete dataQueue.front()
?释放内存。或者使用 dataQueue.erase(dataQueue.front())
?
提前谢谢你。
最佳答案
为什么要使用 new
分配 MData
?它足够小,您可以将它分配到自动存储中,特别是因为您的 dataQueue
已经定义为按值(而不是指针)保存 MData
实例。因此:
MData mData{sourceHeight, sourceWidth};
dataQueue.push_back(mData);
关于c++ - 删除 vector 中的元素,该元素使用 'new' 运算符分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37559594/