1
我有兩個匹配向量unique_ptr
。我決定通過構造一個包含兩個結構的向量來構建它們(結構體也包含其他項目,最終,因此進行重構)。將包含unique_ptr的結構項添加到stl容器中
對於我在這個矢量中添加新項目的最佳方法是什麼?
我當前的代碼是
std::vector<DestinationObjects> destinations;
for (unsigned short &id: ids) {
DestinationObjects d;
d.transmitter = unique_ptr<Transmitter> (new Transmitter(id));
d.controller = unique_ptr<Controller> (new Controller(id));
destinations.push_back(d);
}
當然這份d
,導致問題與unique_ptr
。解決這個問題的最佳方法是什麼?
選項我能想象的,其中有一些我不知道將工作:
- 只需切換到
shared_ptr
。 (一個簡單的發現 - 替換,但感覺像一個cop-out)。 - 爲移動unique_ptr的結構編寫移動構造函數。 (另一件事維護,可能會出錯,因爲我展開結構)。
- 將unique_ptr的空指針推回空結構實例,並在vector中將它們編輯一次。 (Fiddly語法,我也不確定這甚至會起作用)。
任何想法什麼是另一種方法?或者爲什麼我更喜歡我列出的其中一個?
你認爲你的代碼是由什麼引起的'unique_ptr'問題? – Oswald
隱式移動構造函數應該沒問題,除非你因爲某種原因編寫自己的拷貝構造函數而死掉了它。無論如何,類型必須是可移動的,因爲'vector'在重新分配時需要移動對象。 –
只是...移動它?或者更好的,讓自己像老闆和emplace_back一樣的構造函數。 –