Bonjour,
B@tto:
Je m'explique : j'aimerais à l'instanciation que l'utilisateur puisse dimensionner la taille d'un array qui va servir à stocker des données, or j'ai envie d'optimiser le truc et donc de pas mettre une grande valeur histoire que ça prenne pas des ressources pour rien. Donc soit à l'instanciation que redimmenssione mon array déclarer dans le .h, soit je le déclare à l'instanciation en récupérant l'argument correspondant à la taille. Mais autant les deux solutions sont impossibles ...
La taille du tableau restera fixe quoi qu'il arrive ou le tableau pourra éventuellement changer de taille pendant l'exécution ?
Si oui : malloc() / realloc() ou new / delete.
Si non : utilisation d'un template C++ pour fixer la taille du tableau à la compilation.
La solution du malloc(), realloc(), ... est une TRÈS MAUVAISE idée sur un système avec peu de mémoire RAM.
Si les realloc() s'enchainent la mémoire ram va finir par être complétement fragmenté et des erreurs à l'exécution vont apparaitre aléatoirement.
Ps: A noter aussi qu'une version de avr-gcc (je me souvient plus du numéro) a été fourni avec une version buggé de new / delete (équivalent de malloc() en C++) ...
B@tto:
Hey hey, de string ... et justement je viens de regarder les histoires de malloc() mais le problème est maintenant : quelle taille allouer pour un tableau de string ? Pour des integers ok, mais la ??
String est une classe, elle peut donc se stocker sous forme de tableau comme n'importe quelle autre type de variable.
Exemple :
String plop[10]; // Tableau de 10 String vide
Attention: String utilise en interne des malloc / realloc pour stocker les caractères !
-> Faire des tableaux de String c'est ce tirer une balle dans le pied ...
Exemple de template C++ pour faire une allocation statique à la compilation :
// Déclaration
template <const int NBCHR>
class Test {
private:
char tab[NBCHR];
};
// Utilisation
Test toto<12>();
(les templates doivent être déclaré dans un fichier .h PAS .cpp sinon il ne sont utilisable que dans le fichier en question)