簡體   English   中英

無法從C ++中的向量中刪除void指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM