对于下面的代码,我对 p3 向量感到困惑,为什么测试时没有触发移动运算符?对于p1和p2,我可以理解为所有元素都需要复制结束。
这是否意味着当我们移动向量时,它会修改向量对象,因此向量的元素将保持不变。而当我们复制向量时,我们必须复制每个元素。是否有向量运算会触发元素的移动运算符?
#include <iostream>
#include <vector>
using namespace std;
class Test {
public:
Test(int a) {
std::cout << " default " << std::endl;
}
Test(const Test& o) {
std::cout << " copy ctor " << std::endl;
}
Test& operator=(const Test& o) {
std::cout << " copy assign " << std::endl;
return *this;
}
Test(Test&& o) {
std::cout << " move ctor" << std::endl;
}
Test& operator=(Test&& o) {
std::cout << " move assign " << std::endl;
return *this;
}
};
int main()
{
std::cout << " p: " << std::endl;
std::vector<Test> p = {Test(0), Test(0)};
std::cout << std::endl;
std::cout << " vec p1 " << std::endl;
std::vector<Test> p1 = p;
std::cout << std::endl;
std::cout << " vec p2 " << std::endl;
std::vector<Test> p2;
p2.reserve(2);
p2.emplace_back(0);
p2.emplace_back(0);
std::cout << std::endl;
std::cout << " vec p3 " << std::endl;
std::vector<Test> p3 = std::move(p);
}
Run Code Online (Sandbox Code Playgroud)
输出:
p:
default
default
copy ctor
copy ctor
vec p1
copy ctor
copy ctor
vec p2
default
default
vec p3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |