《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 }
运行结果如下:
有以下疑问:
- 移动构造函数对内置类型是怎么操作的?运行结果显示为类值拷贝(int值相同,地址不同)。书上没细说,仅说明编译器对内置类型进行移动操作,书中的例子均在移动构造函数中特意值初始化了当前对象。这样看起来移动构造函数只是对内置类型进行了拷贝操作,书上代码的初始化时多余的?
- 移动构造函数对类类型的资源进行了“窃取”,同书上结论一致,为移动操作。
时间: 2024-12-26 08:21:09