請幫助我理解這種情況:
我在存儲數據的一個項目到struct
一個vector
,我的目標是讓他們活着,直到我調用一個函數來處理數據,然後將它們清除到隊列中。但我的問題是我不知道如何安全地擦除向量中的元素,如果我使用new
運算符分配struct
。
實施例:
刪除向量的元素,它是使用new操作符allocted
//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())
?
預先感謝您。
我認爲你有一個類型錯誤 - 你的std :: vector有MDatas(實際的結構),但你試圖把一個指針推向MData。這是行不通的。要清理由new分配的結構,請嘗試先從列表中刪除它,然後刪除指針。 (你不需要分兩步做,但它可以更容易地看到發生了什麼。) –
dataQueue.push_back(MData);'不會編譯,因爲'MData'是一個結構體,而不是一個對象。 'mData-> dWidth = sourceWidth'不會編譯,因爲您忘記了分號。所以我100%肯定那**不是**你如何在隊列中存儲數據。 – immibis
對不起,我發佈時沒有任何編譯器,我只是簡單地發短信給上面的代碼。我編輯了這些錯誤。 –