c++ - 从 r 值引用 move 到临时的子对象是否可以?

标签 c++ move base-class

如果将临时 Derived 传递给采用 Base&& 的方法,是否可以从中 move 构造 Base?

最佳答案

临时生命周期延长到函数结束(或参数的生命周期),所以你可以 move 构造一个Base来自该引用的对象。

请注意,您需要一个额外的 std::move使其成为 move 而不是拷贝:

Base b = std::move(param);

您从中移出的临时对象将保留为其类型的移出对象指定的任何状态。标准库类型,如 vector<int>string有一个所谓的“有效但未指定的状态” - 基本上你可以做的唯一明智的操作是分配(即复制或 move 到它)或销毁它。没有关于 Base 的信息' move 构造函数定义不能做进一步的假设。

关于c++ - 从 r 值引用 move 到临时的子对象是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26636757/

相关文章:

c++ - 为什么 Visual Studio 编译器说我的 C++ 函数中缺少分号?

c++ - 隐式删除子项时继承父项赋值运算符

c++ - 隐藏不应该在只允许 const 访问的基类中改变的成员变量,这样就可以保留赋值运算符

C++模板鸭子类型与纯虚拟基类继承

c++ - std::list 中的 push_back 似乎导致内存泄漏

c++ - 解决源自 .lib 文件的 "locally defined symbol"和 "unresolved external symbol"

c++ - 我的 C++11 测试表明 sort(vector<string>) 比 C++03 还要慢,有什么错误吗?

rust - Rust 中只有一个变量名和一个分号的语句是什么意思?

C# - 从 "cast"List<BaseClass> 到 List<DerivedClass> 的简单方法?

c++ - 任意但编译时已知数量的类型的元组