vector::erase():刪除指標而不破壞物件
問題:
問題:問題:
問題:
問題:<code class="cpp">void clearVectorContents( std::vector <YourClass*> & a ) { for ( int i = 0; i < a.size(); i++ ) { delete a[i]; } a.clear(); }
物件指標向量需要刪除元素,同時保留物件本身。然而,人們擔心刪除時物件可能會被破壞。
答案:vector::erase() 有效地從向量中刪除元素並呼叫析構函數。然而,在處理指標時,析構函數不會幹預實際物件的銷毀。這是因為容器不擁有指向物件的所有權。
解決方案:<code class="cpp">// Functor for deleting pointers in vector. template<class T> class DeleteVector { public: // Overloaded () operator. // This will be called by for_each() function. bool operator()(T x) const { // Delete pointer. delete x; return true; } };</code>
<code class="cpp">for_each( myclassVector.begin(),myclassVector.end(), DeleteVector<myclass*>());</code>
警告:
不建議在標準容器中儲存原始指標。相反,請考慮利用 boost::shared_ptr 透過指標有效管理資源分配。 優雅的解決方案:為了更通用和更有效率的方法,實作一個函子來刪除向量中的指標。以下是一個例子:用for_each 呼叫這個函子提供了一個快速而簡潔的解:其中myclassVector 表示保存指向myclass 物件的指標的向量。 此策略可確保安全消除所有指向的對象,同時保留向量的完整性。以上是如何安全地刪除向量中的指標而不破壞它們指向的物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!