ExpertiDict

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

object slicing

ˈɑːbdʒɛkt ˈslaɪsɪŋsubstantivo

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 2

Exemplos

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

Veja também

Todos os termos de C++