具有唯一指针向量的对象向量

Vector of Objects that have vector of unique pointers

提问人:jyostna chintala 提问时间:12/21/2020 最后编辑:einpoklumjyostna chintala 更新时间:12/23/2020 访问量:76

问:

我有一个对象的向量 ex:TestStructVec 用于 ex:TestStruct,其中 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 中,它因尝试引用已删除的函数而失败(假设它存在一些复制常量问题)。我

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

请让我知道我做错了什么。

注意:在 VS2015 和 Vs2017 中,它编译良好,没有观察到错误。

任何建议都是值得赞赏的。谢谢。

C++11 矢量 visual-studio-2013 复制构造函数 unique-ptr

评论

0赞 einpoklum 12/22/2020
这难道不是VS2013中的错误,或者对C++11的不完整支持吗?
0赞 jyostna chintala 12/22/2020
我真的不确定这是一个错误还是我缺少要添加的内容?所以你认为这是一个错误。
0赞 einpoklum 12/22/2020
就像我说的,可能是错误或缺少 C++11 功能。如果没有完整的程序,我们无法判断。另外,如果它与更新的 MSVC 版本一起编译,它对您来说真的重要吗?
0赞 jyostna chintala 12/28/2020
是的,这很重要,因为我们为所有 MSVC 版本提供库

答:

0赞 Monsieur AZERTY 12/23/2020 #1

std::make_unique 仅适用于 C++14 及以后

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

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

评论

0赞 jyostna chintala 12/24/2020
谢谢你。但是使用 new 也会失败并出现同样的问题。