Vector::erase() 會銷毀物件指標嗎?
使用物件指標向量時,理解其行為至關重要對儲存的物件使用 vector::erase() 。本文探討了這個問題並提供了維護物件完整性的解決方案。
Vector::erase() 透過呼叫其析構函數從向量中刪除元素。如果包含的物件是原始指針,則 vector::erase() 不會擁有銷毀引用物件的所有權。
要明確銷毀指針向量中引用的對象,您必須手動對每個對象調用 delete包含指針。例如,以下程式碼片段示範如何清除指標向量的內容:
<code class="cpp">void clearVectorContents( std::vector <YourClass*> & a ) { for ( int i = 0; i < a.size(); i++ ) { delete a[i]; } a.clear(); }
但是,不建議將原始指標儲存在標準容器中。更穩健的解決方案是使用共用指標(例如 boost::shared_ptr)來確保正確的物件銷毀。
使用函子和模板的優雅解決方案
泛型優雅的替代方法是使用函子和模板來刪除向量中的指標。這是一個綜合範例:
<code class="cpp">class DeleteVector { public: bool operator()(T x) const { // Delete pointer. delete x; return true; } };
此函子可以與 std::for_each() 結合使用來迭代向量並刪除包含的指標。例如,以下程式碼示範如何使用DeleteVector函子刪除myclass指標向量的內容:
<code class="cpp">for_each( myclassVector.begin(),myclassVector.end(), DeleteVector<myclass*>());</code>
透過使用此方法,您可以無縫刪除向量中引用的對象,而無需擔心關於對像生命週期管理或潛在的記憶體洩漏。
以上是`Vector::erase()` 會自動銷毀物件指標嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!