"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > O fatiamento de objetos ocorre ao usar um `vetor` em C++?

O fatiamento de objetos ocorre ao usar um `vetor` em C++?

Publicado em 2024-11-12
Navegar:452

Does Object Slicing Occur When Using a `vector` in C  ?

Vetores e polimorfismo em C: fatiamento de objetos

Considere o seguinte código C:

class Instruction {
public:
    virtual void execute() { }
};

class Add: public Instruction {
private:
    int a;
    int b;
    int c;
public:
    Add(int x, int y, int z) {a=x;b=y;c=z;}
    void execute() { a = b   c;  }
};

Em uma classe separada:

void some_method() {
    vector v;
    Instruction* i = new Add(1,2,3)
    v.push_back(*i);
}

E em outra classe:

void some_other_method() {
    Instruction ins = v.back();
    ins.execute();
}

Essas classes compartilham o vetor Instrução. No entanto, encontramos uma preocupação em relação à função de execução. Ele manterá seu tipo Add?

Infelizmente, isso não acontecerá. vector armazena valores, não referências. Isso significa que o objeto Instrução será copiado em algum momento, levando a um fenômeno chamado "corte de objeto".

Para resolver esse problema, considere usar vector ou, mais efetivamente, vector >.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3