Я хочу убедиться, что я правильно понимаю это. Я спрашиваю это здесь, так как у меня нет средств, это прописано в явном виде.
Например, у меня есть класс треугольной сетки, который в основном построен следующим образом:
class Mesh
{
public:
struct Face
{
unsigned int a;
unsigned int b;
unsigned int c;
};
//...
private:
std::string file;
std::vector<glm::vec3> vertices;
std::vector<glm::vec3> normals;
std::vector<glm::vec2> texcoord;
std::vector<Face> faces;
}
Поскольку данные в сетке могут быть довольно большими, я хочу реализовать правильную семантику перемещения. Я полностью понимаю это для типов указателей, но для запуска конструктора rvalue мне нужно использовать перемещение, верно?
Например, конструктор rvalue будет:
Mesh::Mesh(Mesh&& other)
: file(std::move(other.file)),
vertices(std::move(other.vertices)),
normals(std::move(other.normals)),
texcoord(std::move(other.texcoord)),
faces(std::move(other.faces) {}
Примечание. Прежде чем кто-то укажет на очевидное, приложение во многих местах использует share_ptr. Но я не хочу искусственно ограничивать использование класса.
vector
перемещается, это означает, что элементы вообще не копируются и не перемещаются. - person Daniel Frey   schedule 14.10.2013std::vector
просто передаст право собственности на внутренний буфер. Конечно, они выиграют от этого при изменении размера векторов, но это не обязательно для собственного движкаMesh
. - person Angew is no longer proud of SO   schedule 14.10.2013