Bonjour,
Petite question qui me passe par la tête : est-ce qu'on peut faire un tableau de TStringList ?
Merci d'avance,
Version imprimable
Bonjour,
Petite question qui me passe par la tête : est-ce qu'on peut faire un tableau de TStringList ?
Merci d'avance,
Tu as plusieurs méthodes pour le faire
array of TStringList donc typedef TStringList** TStringListArray , il faut penser à faire le Create\new lors de l'ajout d'un Item et le Destroy\delete à la suppression
array[0..X] of TStringListdonc TStringList* StringListArray[X+1], Avant l'utilisation faire le Create\new (un test à NULL pour faire un léger lazyload), ne pas oublier la libération
une TObjectList il faut penser à faire le Create\new lors de l'ajout d'un Item mais avec OwnObjecyt à true le Destroy est implicte
ou même une TStringList dont la propriété Objects contient des TStringList ... cela pourrait donner naissance à un arbre, allocation et libération manuelle
un vector<TStringList*> est possible, un foncteur serait idéal pour la libération !
Perso, j'ai fait une template, voir STL list<> et VCL TList<>, basée sur une TObjectList m'évitant le cast systématique, cela rend le code bien plus lisible à mon goût
Merci ShaiLeTroll pour ta réactivité. :P
Cette question est par curiosité personnelle, car le code suivant fonctionne mais j'ai un cast à faire effectivement
Code:
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 TList* lListe = new TList(); TStringList* slListeDyn; // Affectation aux listes existantes ou non ... if (slListe1 != NULL) { lListe->Add(slListe1); } if (slListe2 != NULL) { lListe->Add(slListe2); } for (int i = 0; i < lListe->Count; i++) { slListeDyn = new TStringList(); slListeDyn = static_cast<TStringList*>(lListe->Items[i]); for (int j = 0; j < slListeDyn->Count; j++) { ShowMessage("TStringList[" + IntToStr(i) + "] : " + slListeDyn->Strings[j]); } } for (int k = 0; k < lListe->Count; k++) { delete lListe->Items[k]; } delete lListe;
Attention, ton code fuit !
Tu fais des new TStringList jamais libéré dansEn fait, la seconde affectation écrase le pointeur obtenu par new, celui-ci ne pourra jamais être libéréCode:
1
2 slListeDyn = new TStringList(); slListeDyn = static_cast<TStringList*>(lListe->Items[i]);
la TObjectList au lieu d'une TList, t'épargnera les delete []
Merci ShaiLeTroll
En effet, j'ai modifié mon code afin d'utilise les "TObjectList"