Bonjour.
Pour faire simple j'ai une classe mère appelé Mere et des classes filles appelées Fille1, Fille2 et Fille3.
Je veux que Mere force ses filles à implémenter methode1(void) et methode2(void).
Donc dans Mere.h j'ai :
A un moment je veux un vector remplit de Fille1, Fille2, Fille3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public : virtual methode1(void) = 0; virtual methode2(void) = 0;
Et un truc très important aussi, je ne veux faire aucun free et aucune allocation de mémoire.
A la base j'avais pas les Filles et je faisais avec un Vector de Mere du coup je pouvais faire :
Mais comme là j'ai des méthodes virtual, je suis obligé d'utilisé des pointeurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 vector <Mere> listeMere; ... Mere m1(5.0,1.3); listeMere.push_back(m1);
J'ai vu que ça parlait d'un shared_ptr.
Du coup j'ai fais ça :
Bon le truc chiant c'est que j'ai du changer des . en ->.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 static vector <shared_ptr<Mere>> listeMere; ... listeMere.push_back(shared_ptr<Mere> m1(new Fille1(i, 5)));
Mais sinon c'est correct ?
Dans le principe, c'est propre ?
C'est performant ?
Parce que là je peux faire
Et si listeMere[0] est une Fille1 ça appelle bien Fille1.methode1(); donc ça fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part listeMere[0]->methode1();
Niveau mémoire j'ai quelque chose à gérer ?
Ou alors existe il une autre solution pour avoir un vecor de mere est pouvoir appeler methode1 et methode2 dans n'importe quelle fille ?
Parce qu'en Java j'aurais dis que Mere est une interface et les Filles implements Mere ou un truc comme ça, il me semble que c'est ça parce qu'en disant que t'implements tu dois forcer à implémenter les méthodes de l'interface mère.
Apparemment shared_ptr ça ralentit pas mal.
Si vraiment faut j'utilise les pointeurs tant pis, je ferais des free...
Si vous avez des indications à me donner merci de me les indiquer.
Au revoir.
Edit :
Finalement c'est aussi lent avec des pointeurs normaux.
Edit :
J'ai juste à appelé delete() et c'est bon ?
Je fais comment :
?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 delete listeMere[i]; listeMere.erase(listeMere.begin()+i);
Sinon c'est utile les shared_ptr ?
Partager