我有两个匹配的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
即可。 (一个简单的发现 - 替换,但感觉就像一个警察出局)。任何想法会是另一种方法吗?或者为什么我更喜欢我列出的那个?
答案 0 :(得分:1)
简单做vec.emplace_back( std::move(d) )
。
如果(如您的评论中所述)您的编译器没有实现隐式移动构造函数,请编写您自己的move
构造函数。我对未来的建议是,每当你遇到任何C ++ 11特性的问题并且提出一个问题,提到你正在使用这个编译器,因为很有可能它是“C ++ 11支持”将是一个重要的问题。
如果您的编译器根本不支持任何移动构造函数,请停止使用unique_ptr
- 如果没有move
构造函数,它们将毫无用处。 ;)