擦除向量中的元素,该元素使用' new'操作者

时间:2016-06-01 04:42:18

标签: c++ memory-management vector struct

请帮我理解这个案例:
我正在一个将数据存储到> { "id": 5186, "title": "magh", "respubdate": "2015-10-05", > "acceptdate": "2015-09-28", "author": "??? ?????", > "subject_category_id": 109, "subject_category_name": "???? ????", > "comment": null, "event_title": "????? ???????? ? ????? ??????", > "orgunit_child_name": "???? ?", "orgunit_parent_name": "???????? > ?????? ??????? ? ????????" } <Connector port="8080" URIEncoding="UTF-8" /> 的项目,我的目标是让它们保持活着,直到我调用一个函数来处理数据,然后将它们擦除到队列中。但我的问题是,如果我使用vector运算符分配struct,我就不知道如何安全地删除向量中的元素。
例:

struct

这是我在队列中存储数据的方式:

new

计算完毕后,我想删除队列中的第一个元素
那么我应该使用什么方法://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);
提前谢谢。

3 个答案:

答案 0 :(得分:4)

为什么要使用MData分配new?它足够小,你可以在自动存储中分配它,特别是因为你的dataQueue已被定义为按值(而不是指针)保存MData个实例。因此:

MData mData{sourceHeight, sourceWidth};
dataQueue.push_back(mData);

答案 1 :(得分:1)

由于你要在向量中使用对象而不需要在它之外生活,所以最好的做法是将它直接置于向量中:

 struct MData {
        MData(const int dHeight,const int dWidth):dHeight(dHeight),dWidth(dWidth){}
        int dHeight;
        int dWidth;
    };
    std::vector<MData> dataQueue;
    dataQueue.emplace_back(sourceHeight,sourceWidth);

Online Demo

答案 2 :(得分:0)

假设您正在使用C ++ STL队列库,

MData* firstelement = dataQueue.front();
dataQueue.pop();
delete firstelement;

编辑:正如Dave所指出的,你需要按如下方式定义矢量:

std::vector< MData* > dataQueue;