"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Se produce el corte de objetos cuando se utiliza un "vector" en C++?

¿Se produce el corte de objetos cuando se utiliza un "vector" en C++?

Publicado el 2024-11-12
Navegar:769

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

Vectores y polimorfismo en C: corte de objetos

Considere el siguiente 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;  }
};

En una clase separada:

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

Y en otra clase:

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

Estas clases comparten el vector de instrucción. Sin embargo, encontramos una preocupación con respecto a la función de ejecución. ¿Conservará su tipo Agregar?

Desafortunadamente, no lo hará. vector almacena valores, no referencias. Esto significa que el objeto Instrucción se copiará en algún momento, lo que provocará un fenómeno llamado "corte de objetos".

Para resolver este problema, considere usar vector o, más efectivamente, vector >.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3