gpt4 book ai didi

c++ - move 构造函数,使用 std::move 在两个对象之间 move vector ?

转载 作者:可可西里 更新时间:2023-11-01 15:52:25 26 4
gpt4 key购买 nike

我有一个类似于下面的对象,我正在尝试为它实现一个 move 构造函数,这样你就可以为 std::vector<Mesh> 插入一个.

struct Mesh
{
std::vector<Vector3> vPoint;
bool Valid;

Mesh(Mesh&& other)
{
vPoint = std::move(other.vPoint);
Valid = std::move(other.Valid);
}
};

这是正确的方法吗?如果是的话,other.Valid 在 std::move 操作之后的值是多少?

编辑:

另外,如果我有这个对象的实例,我是否需要在以下场景中使用 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;
}

最佳答案

您应该按如下方式编写您的 move 构造函数:

Mesh( Mesh&& other )
: vPoint( std::move( other.vPoint ) )
, Valid( std::move( other.Valid ) )
{}

与使用构造函数初始化列表相比,在构造函数体内赋值的缺点是,在前一种情况下,您要 move 到的 Mesh 对象的成员对象是默认构造的,然后分配到体内。在后一种情况下,它们是直接根据 std::move 调用的结果构建的。

您不应该在 move 对象后读取它,无论是整数类型还是更复杂的对象。这些对象以未指定的状态存在。

关于c++ - move 构造函数,使用 std::move 在两个对象之间 move vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14784041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com