根据文档,如果需要增加容量,则std::vector
元素应为push_back
和emplace_back
{/ 3}}。
但是在下面的示例中,即使类A
具有移动构造函数,也会在调整大小时使用 copy 构造函数。如果我delete
复制构造函数,则只使用移动构造函数。
#include <iostream>
#include <string>
#include <vector>
struct A
{
A() { std::cout << "creating A\n"; }
A(const A& that) { std::cout << "copying A\n"; }
A(A&&that) { std::cout << "moving A\n"; }
};
int main()
{
std::vector<A> vec;
std::cout << "size=" << vec.size() << ", capacity=" << vec.capacity() << "\n";
vec.emplace_back();
std::cout << "size=" << vec.size() << ", capacity=" << vec.capacity() << "\n";
for (size_t i = vec.size(), n = vec.capacity() + 1; i < n; i++) {
vec.emplace_back();
}
std::cout << "size=" << vec.size() << ", capacity=" << vec.capacity() << "\n";
}
输出
size=0, capacity=0
creating A
size=1, capacity=1
creating A
copying A
size=2, capacity=2
问题是 - 不应该std::vector
更喜欢我的移动构造函数而不是复制构造函数吗?