Pff…
J'avais déjà remarqué que tu pouvais être bavard, mais là…
Mais au moins c'est clair, précis et détaillé…
Envoyé par
koala
Tu auras, sans doute, besoin des deux solutions...: une fonction statique qui permet de retirer un( écartd') élément(s) et qui se chargera d'en libérer correctement la mémoire ET de faire en sorte que la mémoire allouée dynamiquement pour les éléments restant soit automatiquement libérée à la fin de l'application (AKA dans le destructeur).
OK.
En fait, c'est ce que je m'étais dit après-coup…
Envoyé par
koala
Si l'allocation dynamique de mémoire échoue, new lance une exception de type std::bad_alloc:
Euh, en fait je sais très bien ce qu'il se passe lorsqu'une allocation dynamique échoue…
Je voulais juste signaler que je suis parfaitement conscient que je ne gère pas (encore) ce cas de figure.
Envoyé par
Steph_ng8
plutôt que faire de simples typedefs
Je voulais dire se contenter de faire un typedef du genre :
typedef std::container<mon_type *> mon_conteneur;
et du coup laisser la responsabilité du nettoyage (la libération des ressources pointées par les pointeurs du conteneur) à l'utilisateur.
Envoyé par
koala
Envoyé par
Steph_ng8
ou dériver d'un conteneur standard.
Le principe de base est de ne jamais dériver d'un conteneur de la STL, du moins, pas à but polymorphique.
En fait, depuis que j'ai remarqué que le destructeur des conteneurs standards n'est pas virtuel, ça ne me vient même plus à l'esprit de les dériver dans un but polymorphique.
Envoyé par
Steph_ng8
est-ce que l'on peut mixer les déclarations de tels conteneurs internes et privées (utilisés par une seule classe) et globales (utilisés par plusieurs classes), ou est-ce une mauvaise idée ?
Encore une fois, je n'ai pas été assez précis…
Je me demandais si c'est cohérent de trouver ce genre de déclarations au sein d'un même projet (je mets des typedefs par simplicité) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class classe_1
{
private:
typedef std::container<classe_1> collection;
(...)
};
class classe_2
{ (...) };
class classe_3
{
private:
typedef std::container<classe_2> collection;
(...)
};
class classe_4
{ (...) };
typedef std::container<classe_4> collection_classe_4; |
Si j'ai bien compris, la réponse semble être positive.
Pour le reste, merci de toutes ces précisions.
Et surtout d'avoir pris le temps de les écrire !
Partager