C++ · Intermediário · Inglês · Técnico
object slicing
Perda da parte derivada de um objeto quando ele é copiado para uma variável do tipo base por valor. Só os membros da base sobrevivem, e o comportamento polimórfico some.
Onde usar
Aparece em funções que recebem a classe base por valor ou em vector<Base> guardando derivados. Em code review, a correção é passar por referência ou ponteiro, ou usar vector<unique_ptr<Base>>.
Em código
struct A { virtual int f() { return 1; } };
struct B : A {
int f() override { return 2; }
};
B b;
A a = b; // fatia: copia só a parte A
std::cout << a.f(); // 1, não 2Exemplos
You passed the derived object by value, so you got object slicing.
Você passou o objeto derivado por valor, então ocorreu object slicing.
Store pointers in the vector, otherwise object slicing will cut off the derived part.
Guarde ponteiros no vector, senão o object slicing corta a parte derivada.
Cuidado
Não é erro de compilação: o código compila sem aviso e só falha em execução.
Sinônimos
fatiamento de objeto