首页 > 代码库 > 关于移动操作的一个问题
关于移动操作的一个问题
《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值相同,地址不同)。书上没细说,仅说明编译器对内置类型进行移动操作,书中的例子均在移动构造函数中特意值初始化了当前对象。这样看起来移动构造函数只是对内置类型进行了拷贝操作,书上代码的初始化时多余的?
- 移动构造函数对类类型的资源进行了“窃取”,同书上结论一致,为移动操作。
关于移动操作的一个问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。