gpt4 book ai didi

c++ - 当在 vector 上使用调整大小时, vector 内部结构中的 unique_ptr 不会编译

转载 作者:太空狗 更新时间:2023-10-29 20:29:22 24 4
gpt4 key购买 nike

VS2010

我有一个结构,里面有一个unique_ptr。然后我就有了这个结构的vector。如果我尝试调整 vector 的大小(或使用保留),我会收到编译错误。下面是一个仍然存在问题的精简示例。

struct Test
{
unique_ptr<int> pValue;
};

void test()
{
// this doesn't compile
vector<Test> testVector;
testVector.resize(5);

// this also doesn't compile
testVector.reserve(5);

// this, of course, compiles
vector<unique_ptr<int>> testVector2;
testVector2.resize(5);
testVector2.reserve(5);
}

我收到的错误是关于访问 unique_ptr(赋值运算符)的私有(private)成员的投诉。编译器正在尝试动态构造 Test &Test::operator =(const Test &)Test::Test(const Test &)。我不明白为什么调整大小操作需要调用这些函数中的任何一个(如果需要,为什么它不调用默认构造函数?)。它们都存在问题,因为由于 const 而无法使用 unique_ptr 来实现。

最佳答案

我讨厌打断你与自己的对话。 :-)

但答案是 VS2010 尚未完全实现 C++11 规范(这需要一些时间旅行)。 Test 应具有调用 unique_ptr 移动构造函数的默认 noexcept 移动构造函数。 VS2010 不实现此隐式 Test 移动构造函数。如果是这样,您的完整示例将按预期编译和运行。 vector 将在需要时使用 noexcept 移动构造函数来移动对象。

关于c++ - 当在 vector 上使用调整大小时, vector 内部结构中的 unique_ptr 不会编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10135017/

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