我有两个匹配的向量unique_ptr
。我决定通过制作一个包含两个结构的向量来统一它们unique_ptr
(该结构最终还将包含其他项目,因此进行了重构)。
我在这个向量中添加新项目的最佳方法是什么?
我目前的代码是
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
. (一个简单的查找替换,但感觉像是一个逃避)。 - 为移动 unique_ptr 的结构编写移动构造函数。(当我扩展结构时,要维护的另一件事可能会出错)。
- 推回一个带有空指针的空结构实例,用于 unique_ptr 并在向量中编辑它们一次。(繁琐的语法。我也不确定这是否可行)。
有什么想法会是另一种方法吗?或者为什么我应该更喜欢我列出的其中之一?