"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Le découpage d'objets se produit-il lors de l'utilisation d'un « vecteur » en C++ ?

Le découpage d'objets se produit-il lors de l'utilisation d'un « vecteur » en C++ ?

Publié le 2024-11-12
Parcourir:974

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

Vecteurs et polymorphisme en C : découpage d'objets

Considérez le code C suivant :

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;  }
};

Dans une classe distincte :

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

Et dans une autre classe :

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

Ces classes partagent le vecteur d'instruction. Nous rencontrons cependant un souci concernant la fonction d’exécution. Conservera-t-il son type Ajouter ?

Malheureusement, ce ne sera pas le cas. vector stocke les valeurs, pas les références. Cela signifie que l'objet Instruction sera copié à un moment donné, conduisant à un phénomène appelé « découpage d'objet ».

Pour résoudre ce problème, envisagez d'utiliser vector ou, plus efficacement, vector >.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3