"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 > ¿Cómo puedo evitar el corte de objetos al usar herencia con vectores C ++?

¿Cómo puedo evitar el corte de objetos al usar herencia con vectores C ++?

Publicado el 2025-01-24
Navegar:698

How Can I Avoid Object Slicing When Using Inheritance with C   Vectors?

División de objetos y polimorfismo en contenedores vectoriales

Cuando se trata de herencia en C, a veces es deseable almacenar instancias de clases derivadas en contenedores como por ejemplo vectores. Sin embargo, el enfoque sencillo de usar un vector para almacenar objetos de clase base puede llevar a la división de objetos, donde se pierden los datos derivados específicos de la clase.

Considere el siguiente programa:

class Base {
public:
    virtual void identify() {
        cout  vect;
    vect.push_back(derived);

    vect[0].identify();
    return 0;
}

El código crea un vector de objetos Base y almacena una instancia de la clase Derivada. Sin embargo, al llamar al método identificar() en el objeto almacenado, imprime "BASE" en lugar de "DERIVADO". Esto se debe a que la división del objeto ocurre cuando el objeto Derivado se asigna al elemento del vector base, lo que resulta en la pérdida de datos específicos derivados.

Para evitar la división del objeto y preservar el comportamiento polimórfico, la solución preferida es usar punteros a objetos de clase base en el vector:

vector

Esto garantiza que los datos derivados específicos de la clase permanezcan intactos. Además, para evitar la gestión manual de la memoria, se pueden emplear punteros inteligentes:

vector<:shared_ptr>>

Los punteros inteligentes garantizan la gestión automática de la memoria a través de RAII (La adquisición de recursos es inicialización) , lo que lo convierte en un enfoque más sólido y conforme a C.

Ú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