簡體   English   中英

將 object 插入到不允許復制構造函數的 std::deque 中

[英]Insert object into std::deque that does not allow copy constructor

我使用std::deque來保存一些對象,只要我可以使用deque.emplace_front添加新元素,它就可以很好地工作。 但是,現在我想用已經存在的 object 替換雙端隊列的一個元素。當我嘗試執行以下操作時

auto it = mydeque.begin();
++it;
mydeque.insert(it, object);
mydeque.erase(it);

我得到一個錯誤,因為我的 object 不允許復制。 我怎樣才能解決這個問題?

編輯:

我不能使用 emplace 的原因是因為這個方法構造了一個新的 object,而我想插入我現有的。

容器的元素始終是不同的 object。如果插入現有的 object,則必須復制或移動 object。

我得到一個錯誤,因為我的 object 不允許復制。 我怎樣才能解決這個問題?

如果類型允許移動,那么您可以使用std::move 否則,您無法將預先存在的 object 插入到容器中。


不可移動類型的一些 XY 解決方案:

  • 通過最初使用emplace在容器中創建 object 來避免此問題。
  • 使用間接。 不是在容器中存儲hp::DoFHandler<dim>對象,而是存儲一些指向 object 的東西,例如指針。 這種方法的缺點是必須確保指針的生命周期不超過所指向的 object 的生命周期。使用共享所有權 ( std::shared_ptr ) 是確保這一點的簡單方法,但它還有其他潛力缺點。

暫無
暫無

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

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