首页 > 代码库 > 关于移动操作的一个问题

关于移动操作的一个问题

《C++ Primer》学习第13章中,关于移动操作:

 1 #include <string>
 2 
 3 class Foo {
 4 public:
 5     Foo(int a, int b, std::string c="") :x(a), y(b), s(new std::string(c)) {}
 6     Foo(const Foo&) = default;
 7     Foo& operator=(const Foo &) = default;
 8     Foo(Foo&&) noexcept= default;
 9     Foo& operator=(Foo &&) noexcept= default;
10     ~Foo() {}
11 
12     int x = 42;
13     int y = 12;
14     std::string* s;
15 };
16 int main()
17 {
18     Foo v(26, 12, "s");
19     int *p = &(v.x);
20     int *p2 = &(v.y);
21 
22     Foo v2(std::move(v)); 
23     int *pp = &(v2.x);
24     int *pp2 = &(v2.y);
25     return 0;
26 }

运行结果如下:

技术分享

有以下疑问:

  1. 移动构造函数对内置类型是怎么操作的?运行结果显示为类值拷贝(int值相同,地址不同)。书上没细说,仅说明编译器对内置类型进行移动操作,书中的例子均在移动构造函数中特意值初始化了当前对象。这样看起来移动构造函数只是对内置类型进行了拷贝操作,书上代码的初始化时多余的?
  2. 移动构造函数对类类型的资源进行了“窃取”,同书上结论一致,为移动操作。

 

关于移动操作的一个问题