Maison > développement back-end > C++ > 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 ?

Barbara Streisand
Libérer: 2024-11-01 14:07:02
original
975 Les gens l'ont consulté

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 :

<code class="cpp">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;  }
};</code>
Copier après la connexion

Dans une classe séparée :

<code class="cpp">void some_method() {
    vector<Instruction> v;
    Instruction* i = new Add(1,2,3)
    v.push_back(*i);
}</code>
Copier après la connexion

Et dans une autre classe :

<code class="cpp">void some_other_method() {
    Instruction ins = v.back();
    ins.execute();
}</code>
Copier après la connexion

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. vecteur stocke des valeurs, pas des références. Cela signifie que l'objet Instruction sera copié à un moment donné, ce qui entraînera un phénomène appelé « découpage d'objet ».

Pour résoudre ce problème, envisagez d'utiliser le vecteur ou, plus efficacement, vecteur≪ std::reference_wrapper >.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal