gpt4 book ai didi

c++ - 为什么在超出容量时 resize() 会导致 vector 内容的复制而不是 move ?

转载 作者:可可西里 更新时间:2023-11-01 17:05:38 27 4
gpt4 key购买 nike

<分区>

下面给定类 X(明确定义的特殊成员函数与本实验无关):

struct X
{
X() { }
X(int) { }
X(X const&) { std::cout << "X(X const&)" << std::endl; }
X(X&&) { std::cout << "X(X&&)" << std::endl; }
};

以下程序创建了一个类型为 X 的对象 vector ,并调整它的大小以超出其容量并强制重新分配:

#include <iostream>
#include <vector>

int main()
{
std::vector<X> v(5);
v.resize(v.capacity() + 1);
}

由于 X 类提供了 move 构造函数,我希望 vector 的先前内容在重新分配后被 move 到新存储中。令人惊讶的是,that does not seem to be the case ,我得到的输出是:

X(X const&)
X(X const&)
X(X const&)
X(X const&)
X(X const&)

为什么?

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