请帮我理解这个案例:
我正在一个将数据存储到> { "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);
?
提前谢谢。
答案 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);
答案 2 :(得分:0)
假设您正在使用C ++ STL队列库,
MData* firstelement = dataQueue.front();
dataQueue.pop();
delete firstelement;
编辑:正如Dave所指出的,你需要按如下方式定义矢量:
std::vector< MData* > dataQueue;