[英]Cant delete void pointer from vector in c++
大家好,我試圖從向量中刪除空指針,程序在刪除時崩潰。 非常感謝你!
template <class T> class tArray_t : public vpArr_t {
virtual ~tArray_t() {
for (vector<void*>::iterator it = array.begin() ; it != array.end(); )
{
vector<void*>::iterator nextElement = it+1;
delete *it; // here is the crash
it = nextElement;
}
};
刪除void
指針是未定義的 。 您正在得到您所要求的。
使用vector<T*>
代替vector<void*>
。 例如,如果從基類繼承了vector<void*>
,則必須在刪除T*
之前將其轉換為T*
。
delete static_cast<T*>(*it);
您可能還需要保存一些工作並使用boost::ptr_vector
。
編譯器知道要使用類型化的指針刪除多少字節。 這樣想吧,void *指針沒有有關它指向的內存的任何信息,沒人知道如何刪除這樣的指針。 至少,您不知道需要刪除什么大小,也沒有有關調用哪個析構函數的信息。
Class A;
A * p = new A();
delete p;
當執行delete p時,編譯器知道需要調用一個析構函數,並且需要清除的內存大小為sizeof(A)。 無效*指針會丟失所有這些信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.