首页 > 试题广场 >

请问以下 C++ 代码,会产生什么问题() MyObject

[单选题]
请问以下 C++ 代码,会产生什么问题()
MyObject a(5);
MyObject b = std::move(a);
cout << a << endl;
  • 该代码没有任何问题
  • 该代码会出现空指针访问
  • 该代码会出现算数溢出
  • 该代码会产生未定义的行为
使用 std::move 将 左值a 转换为 右值引用,触发 MyObject 的移动构造函数
MyObject 移动构造函数会"窃取" a 的资源到 b 
 移动后,a 处于"有效但未指定的状态"(空), 所以当对移动后源对象的操作( cout << a << endl,)属于未定义行为
  • 该代码会产生未定义的行为
发表于 2025-06-01 15:55:42 回复(0)
  • std::move(变量)本身不移动任何数据,只做 1 件事:把变量标记为 “可被转移资源”
  • 单独写std::move(a);= 纯标记,无任何作用
  • 必须直接赋值使用:类型 新变量 = std::move(旧变量);→ 才会触发资源转移 (类似于剪切)
  • 资源转移后:旧变量变成空壳,禁止再读取 / 使用(否则未定义行为)。
  • 发表于 2026-03-22 21:09:37 回复(0)