首頁  >  文章  >  後端開發  >  `Vector::erase()` 會自動銷毀物件指標嗎?

`Vector::erase()` 會自動銷毀物件指標嗎?

Patricia Arquette
Patricia Arquette原創
2024-11-03 00:21:29602瀏覽

 Does `Vector::erase()` Automatically Destroy Object Pointers?

Vector::erase() 會銷毀物件指標嗎?

使用物件指標向量時,理解其行為至關重要對儲存的物件使用 vector::erase() 。本文探討了這個問題並提供了維護物件完整性的解決方案。

Vector::erase() 透過呼叫其析構函數從向量中刪除元素。如果包含的物件是原始指針,則 vector::erase() 不會擁有銷毀引用物件的所有權。

要明確銷毀指針向量中引用的對象,您必須手動對每個對象調用 delete包含指針。例如,以下程式碼片段示範如何清除指標向量的內容:

<code class="cpp">void clearVectorContents( std::vector <YourClass*> &amp; 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn