Nts*_*alt 10 c++ move-semantics c++11
我有一个类似下面的对象,我正在尝试实现一个移动构造函数,因此你可以有一个插入std::vector<Mesh>.
struct Mesh
{
std::vector<Vector3> vPoint;
bool Valid;
Mesh(Mesh&& other)
{
vPoint = std::move(other.vPoint);
Valid = std::move(other.Valid);
}
};
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?如果是这样,在std :: move操作之后,other.Valid的值是多少呢?
编辑:
另外,如果我有这个对象的实例,我需要在以下场景中使用std :: move吗?
std::vector<Mesh> DoSomething()
{
Mesh mesh; //Imagine vPoint is filled here to
std::vector<Mesh> meshes;
meshes.push_back(std::move(mesh)); // Here is my question, std::move? or just pass mesh here?
return meshes;
}
Run Code Online (Sandbox Code Playgroud)
Pra*_*ian 11
您应该编写移动构造函数,如下所示:
Mesh( Mesh&& other )
: vPoint( std::move( other.vPoint ) )
, Valid( std::move( other.Valid ) )
{}
Run Code Online (Sandbox Code Playgroud)
与使用构造函数初始化程序列表相反,在构造函数体内赋值的缺点是,在前一种情况下Mesh,您要移动到的对象的成员对象是默认构造的,然后分配到正文中.在后一种情况下,它们是直接根据std::move呼叫结果构建的.
移动后,您不应该从对象中读取,无论是整数类型还是更复杂的对象.这些对象存在于未指定的状态.
| 归档时间: |
|
| 查看次数: |
9351 次 |
| 最近记录: |