C++ · Intermediário · Português · Técnico
semântica de movimento
Recurso do C++11 que permite transferir os recursos de um objeto temporário ou descartável para outro, em vez de copiá-los. Evita alocações caras ao mover strings, vetores e afins.
Onde usar
Aparece ao retornar objetos grandes por valor, inserir em contêineres e implementar classes que gerenciam recursos. Em code review, verifica-se se a classe tem construtor de movimento e se ele é noexcept.
Em código
std::vector<int> a(1000, 7);
std::vector<int> b = std::move(a); // move
// a continua válido, estado não especificado
std::cout << b.size(); // 1000Exemplos
Com a semântica de movimento, retornar um vector grande por valor é barato.
Essa classe não tem semântica de movimento, então toda inserção copia o buffer.
Cuidado
Mover não destrói o objeto de origem: ele continua válido, porém em estado não especificado.
Sinônimos
move semantics
Antônimos
semântica de cópia