gpt4 book ai didi

c++ - 将包含 unique_ptr 的结构项添加到 STL 容器

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:25 25 4
gpt4 key购买 nike

我有两个 unique_ptr 的匹配 vector 。我决定通过制作一个包含两个 unique_ptr 的结构 vector 来统一它们(该结构最终还将包含其他项目,因此进行了这次重构)。

我在此 vector 中添加新项目的最佳方法是什么?

我现在的代码是

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 出现问题。解决此问题的最佳方法是什么?

我能想到的选项,其中一些我不确定是否可行:

  1. 只需切换到shared_ptr。 (一个简单的查找替换,但感觉像是逃避)。
  2. 为移动 unique_ptr 的结构编写一个移动构造函数。 (当我扩展结构时,维护的另一件事可能会出错)。
  3. 为 unique_ptr 推回一个带有空指针的空结构实例,并在 vector 中就地编辑一次。 (繁琐的语法。我也不确定这是否有效)。

有什么想法是另一种方法吗?或者为什么我应该更喜欢我列出的其中一个?

最佳答案

简单地做一个 vec.emplace_back( std::move(d) )

如果(如您的评论中所述)您的编译器未实现隐式移动构造函数,请编写您自己的 move 构造函数。我在未来的建议是,每当你遇到任何 C++11 特性的问题并提出问题时,请提及你正在使用这个编译器,因为很有可能它的“C++11 支持”将是一个重要的问题。

如果您的编译器根本不支持任何移动构造函数,请停止使用 unique_ptr —— 如果没有 move 构造函数,它们将毫无用处。 ;)

关于c++ - 将包含 unique_ptr 的结构项添加到 STL 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19728164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com