c++ - 删除 vector 中的元素,该元素使用 'new' 运算符分配

标签 c++ memory-management vector struct

请帮助我理解这个案例:
我在一个将数据存储到 structvector 的项目中工作,我的目标是让它们保持事件状态,直到我调用一个函数来处理数据,然后删除它们在队列中。但我的问题是,如果我使用 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/

相关文章:

c++ - 编译简单的 C++ 程序时出错

c++ - 指向对象的句柄和指针

memory-management - Go怎么没有stackoverflow

android - 应用程序加载时分配大内存

c++ - 初始化 vector 对

c++ - 填充整数列表比填充整数 vector 快 100 倍

c++ - 编译错误 : missing argument in temporary object constructor

c++ - 在 C++ 中正确使用堆栈和堆?

c++ - 我应该为指针赋值使用什么返回类型?

c++ - 传递给 lambda 函数的空指针不再为空