Membres statics avec allocation dynamique
Bonjour,
je crée une classe, on va dire MonInt, et je veux que mes entiers respectent certaines contraintes.
Je crée alors une classe Contrainte qui contient seulement la méthode virtuelle suivante :
Code:
virtual verif(Tableau *);
et deux classes qui héritent de Contrainte, disons ContrainteMin et ContrainteMax, qui ont juste la méthode verif de définie.
Je crée ensuite une autre classe : Tableau qui est codée de la manière suivante :
Code:
1 2 3 4 5 6 7 8 9
|
class Tableau
{
public :
...
private :
MonInt tab[30];
Contrainte * _cte[2];
} |
Bref jusqu'ici pas de problème, mais je me dis: "t'es bête les contraintes c'est les mêmes pour tous les objets" et donc je me dis : "mets les en static".
Ma classe devient :
Code:
1 2 3 4 5 6 7 8 9
|
class Tableau
{
public :
...
private :
MonInt tab[30];
static Contrainte * _cte[2];
} |
Là, je me dis comment faire pour avoir une initialisation correcte ?
Je cherche un peu, j'essaye sur des ints, après des int * et j'en viens à ceci pour l'initialisation :
Code:
1 2
|
Contrainte * _cte[2] = { new ContrainteMin(), new ContrainteMax() } |
Je n'ai pas trouvé d'autre méthode pour initialiser mes contraintes. (Je ne suis pas sûr qu'il y en ait d'autre).
Mais là je commence à me dire, ok tu as tes contraintes, mais comment tu fais :
1. si le new a envoyé une exception bad_alloc
2. pour faire un delete des Contraintes
Pour le 1, a part mettre un try et a catch à la ligne d'initialisation, je vois pas comment faire.
Pour le 2, je fais un delete avec une fonction qui a un acces a mon tableau de contraintes à la fin du programme principal.
Mais les solutions que j'ai données ne me paraissent pas satisfaisantes du tout.
Je pense que je ne dois pas faire ceci, si ?
Une solution plus élégante consisterait a créer une variable pour chaque contrainte (ici ça va car j'en ai que 2), mais comment faire (si c'est possible) pour garder ce que j'ai avant à savoir un tableau de pointeurs sur des Contraintes.
Merci d'avance.
Bonne journée.
b Oo