【问题标题】:Vector of Objects that have vector of unique pointers具有唯一指针向量的对象向量
【发布时间】:2024-01-11 14:55:01
【问题描述】:

我有一个用于 ex:TestStruct 的对象向量 ex:TestStructVec,其中 object 包含一个唯一指针向量 ex: uptrVec。

struct TestClass {};

struct TestStruct
{
   std::vector<std::unique_ptr<TestClass> > uptrVec;
}
std::vector<TestStruct> TestStructVec;


TestStruct ts1;
 ts1.uptrVec.emplace_back(std::make_unique<TestClass>());

现在,当将此对象放回向量时,仅在 vs2013 和 c++11 中,尝试引用已删除的函数时失败(假设它存在一些复制 const 问题)。我

TestStructVec.emplace_back(std::move(ts1));

请告诉我我哪里做错了。

注意:在 VS2015 和 Vs2017 中编译正常,没有观察到错误。

感谢任何建议。谢谢。

【问题讨论】:

  • 会不会是 VS2013 的 bug,或者对 C++11 的支持不完整?
  • 我真的不确定这是一个错误还是我缺少要添加的内容?所以你认为这是一个错误。
  • 就像我说的,可能是一个错误或缺少 C++11 功能。如果没有完整的程序,我们无法判断。另外,如果它与较新的 MSVC 版本一起编译,对你来说真的很重要吗?
  • 是的,这很重要,因为我们为所有 msvc 版本提供库

标签: c++11 vector visual-studio-2013 copy-constructor unique-ptr


【解决方案1】:

std::make_unique 只能从 c++14 开始使用

你可以在这里看到它:https://en.cppreference.com/w/cpp/memory/unique_ptr

在非成员函数部分 > make_unique > 版本(绿色):

【讨论】:

  • 谢谢。但使用 new 也会因同样的问题而失败。