簡體   English   中英

如何使用指針向量實現類析構函數C ++

[英]How to implement class destructor with vector of pointers C++

如果我在類中有指針的類和指針矢量,應如何編寫析構函數以適當釋放內存? 這是正確的嗎?

~Class()
{
  for(int i = 0; i<v.size(); i++)
  {
    delete v[i];
  }
}

還是我也應該刪除向量中的元素? 或其他解決方案?

~Class()
{
  for(int i = 0; i<v.size(); i++)
  {
    delete v[i];
    v.erase(e.begin() + i);
  }
}

如果我在類中有指針的類和指針矢量,應如何編寫析構函數以適當釋放內存? 這是正確的嗎?

這取決於。

指針是否指向分配了new對象,並且此類是這些動態對象的所有者(即,該類負責它們的銷毀)嗎? 如果不是,那是不正確的。

還是我也應該刪除向量中的元素?

您刪除向量元素的示例是錯誤的。 它會跳過一半的元素,因此不會調用delete所有指針。 第一次迭代后,第一個元素將被擦除,因此下一個元素已移至索引0,但是next循環刪除並擦除了索引1中的元素。

刪除向量的元素沒有任何意義,因為它將立即被破壞。

或其他解決方案?

如果您打算讓該類擁有動態分配的對象,則最好使用對象向量而不是指針。 例如,如果需要指針向量來允許運行時多態性,請使用std::unique_ptr向量。 這樣,您就不需要實現析構函數,因為自動生成就可以了。

如果您的類應該擁有所指向的對象,那么它足以做到:

for (auto p : v) delete p;

如果向量本身是類的成員,則在破壞類實例對象時,其元素將被刪除,您無需手動執行此操作。 在您的示例中,您也做錯了。 如果它是std :: vector,則可以調用vector的clear()方法。 否則,您將調用delete [] p; 其中p是指向向量元素本身的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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