
1、原始指针和内置类型用std::move不会转移所有权只有资源管理语义的类比如智能指针才会有真正的转移所有权。2、对内置类型使用move之后虽然没有转移所有权但不应该再使用了原对象的状态处于“未指定”可能是原值也可能是新值。3、move的作用类型转换左值转右值一个“借用”资源的方式不会销毁对象也不会释放内存。#include iostream #include memory void func(int value) { value; std::cout Rvalue reference received: value std::endl; } int main() { int* ptr new int(42); std::cout Value: *ptr std::endl; int* ptr2 std::move(ptr);//指针也是内置类型std::move只是将其转换为右值引用并不会改变指针的值或所有权。 if (!ptr)//ptr仍然指向原来的地址但我们不应该再使用它因为它已经被移动了。 { std::cout ptr is now null after move. std::endl; } else { std::cout Value from ptr: *ptr std::endl; } std::cout Value from ptr2: *ptr2 std::endl; int x 10; func(std::move(x));//对内置类型的移动没有实际意义因为它们没有资源管理的特性但这只是为了演示std::move的用法。 std::cout Value of x after move: x std::endl;//值是11但我们不应该再使用x因为它已经被移动了不能访问。 std::unique_ptrint uniquePtr1 std::make_uniqueint(42); std::unique_ptrint uniquePtr2 std::move(uniquePtr1); if (!uniquePtr1)//unique_ptr在移动后会变为null表示它不再拥有资源不能访问。 { std::cout uniquePtr1 is now null after move. std::endl; } else { std::cout Value from uniquePtr1: *uniquePtr1 std::endl; } return 0; }