ExpertiDict

C++ · Intermediário · Português · Técnico

semântica de movimento

seˈmɐ̃tʃikɐ dʒi movĩˈmẽtulocução nominal

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();  // 1000

Exemplos

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

Veja também

Todos os termos de C++