C++延遲delete對象方案:採用unique_ptr託管欲刪除的對象指針

在循環遍歷容器的時候,假如容器裏面存的是動態對象的指針,我們就不能簡單地移除掉此容器元素,還需要把此指針指向的對象 delete 掉。

但隨着業務的增長,循環中我們需要對次對象執行大量的操作,這種情形下,我們往往會延遲delete掉此對象。那麼有什麼方案可以實現呢?

此處介紹的方案是:

  1. 將對象指針託管給 unique_ptr ,並存入一個set
  2. 將元素從容器中刪除
  3. 循環結束後,clear set

除非你的業務邏輯依賴對象的析構函數,這種方法和直接delete對象不會存在本質上的差別。所執行的邏輯語義完全一致。參考如下代碼:

std::set<std::unique_ptr<Obj>> delay_remove_obj_set;
std::set<Obj *> obj_list;

// ...

for (auto it = obj_list.begin(); it != obj_list.end())
{
  if (...)
  {
    // erase
    delay_remove_obj_set.insert(*it);

    it = obj_list(it);
  }
  else
  {
    it->Update();
    ++it;
  }
}
delay_remove_obj_set.clear();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章