[英]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 不允許復制。 我怎樣才能解決這個問題?
編輯:
hp::DoFHandler<dim>
類型,記錄在這里: https://www.dealii.org/current/doxygen/deal.II/classhp_1_1DoFHandler.html 。emplace
的原因是因為這個方法構造了一個新的 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.