|
POO - Libération d'un tableau dynamique dans une classe |
Iniciado por gkcc, 06,ago. 2003 19:24 - 7 respuestas |
| |
| | | |
|
| |
Publicado el 06,agosto 2003 - 19:24 |
Bjr à tous. J'utilise un tableau dynamique déclaré privé global (t_race), et un booléen privé global (race_alloué) pour n'allouer ce tableau qu'une seule fois.
Pour le premier objet qui utilise la classe, j'alloue ce tableau depuis un fichier dans le constructeur de l'objet.
Les objets suivant utilise uniquement le contenu de ce tableau mais ne l'alloue plus.
Si je test le programme (mode test sous l'éditeur), WD me dit que le tableau dynamique n'est pas libéré.
Si je rajoute en terminaison de classe la libération du tableau t_race j'ai un message d'erreur qui dit que t_race n'est pas un objet dynamique.
Question : Comment libérer ce tableau global qui a été alloué dans le constructeur du premier objet ?
Merci ,
Gérard. |
| |
| |
| | | |
|
| | |
| |
Publicado el 07,agosto 2003 - 12:34 |
Moi je libererai le tableau dynamique dans le destructeur de l'objet qui a fait son allocation (dans ton cas la première instance)
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f3128af@news....
Bjr à tous. J'utilise un tableau dynamique déclaré privé global (t_race), et un booléen
privé global (race_alloué) pour n'allouer ce tableau qu'une seule fois.
Pour le premier objet qui utilise la classe, j'alloue ce tableau depuis un fichier dans le constructeur de l'objet.
Les objets suivant utilise uniquement le contenu de ce tableau mais ne l'alloue plus.
Si je test le programme (mode test sous l'éditeur), WD me dit que le tableau
dynamique n'est pas libéré.
Si je rajoute en terminaison de classe la libération du tableau t_race j'ai
un message d'erreur qui dit que t_race n'est pas un objet dynamique.
Question : Comment libérer ce tableau global qui a été alloué dans le constructeur du premier objet ?
Merci ,
Gérard.
|
| |
| |
| | | |
|
| | |
| |
Publicado el 07,agosto 2003 - 18:01 |
Merci, Oui, mais dans ce cas, je dois recharger le tableau, qui est global à la classe, à chaque objet, donc un temps de traitement désastreux. Le tableau étant unique et global pour tout les objets, je comptais le charger en mémoire qu'une seul fois.
"Percapita" <f.lambour@everlog.com> a écrit dans le message news: 3f321a35$1@news....
Moi je libererai le tableau dynamique dans le destructeur de l'objet qui a fait son allocation (dans ton cas la première instance)
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f3128af@news....
Bjr à tous. J'utilise un tableau dynamique déclaré privé global (t_race), et un booléen privé global (race_alloué) pour n'allouer ce tableau qu'une seule fois.
Pour le premier objet qui utilise la classe, j'alloue ce tableau depuis un
fichier dans le constructeur de l'objet.
Les objets suivant utilise uniquement le contenu de ce tableau mais ne l'alloue plus.
Si je test le programme (mode test sous l'éditeur), WD me dit que le tableau dynamique n'est pas libéré.
Si je rajoute en terminaison de classe la libération du tableau t_race j'ai un message d'erreur qui dit que t_race n'est pas un objet dynamique.
Question : Comment libérer ce tableau global qui a été alloué dans le constructeur du
premier objet ?
Merci ,
Gérard.
|
| |
| |
| | | |
|
| | |
| |
Publicado el 07,agosto 2003 - 18:57 |
Ok, 2 solutions : 1- tu alloues ton tableau dans le code d'ouverture du projet et tu libère ton tableau dans le code de fermeture du projet. (il faut passer par des méthodes globale public car ton tableau est privé) Note : avec cette solution le tableau est alloué même si tu n'a pas d'objet instancié
2- le premier objet instancié alloue le tableau pour les suivant, le dernier libéré libère le tableau (il va falloir compter le nombre d'instance dans un entier long global à ta classe) Note : avec cette solution quand il n'y a plus d'objet le tableau n'est pas alloué, qd il y a en 15 en mémoire le tableau a été alloué une seule fois.
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f3266b4@news....
Merci, Oui, mais dans ce cas, je dois recharger le tableau, qui est global à la classe, à chaque objet, donc un temps de traitement désastreux. Le tableau étant unique et global pour tout les objets, je comptais le charger en mémoire qu'une seul fois. "Percapita" <f.lambour@everlog.com> a écrit dans le message news: 3f321a35$1@news.... Moi je libererai le tableau dynamique dans le destructeur de l'objet qui a
fait son allocation (dans ton cas la première instance)
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f3128af@news.... Bjr à tous. J'utilise un tableau dynamique déclaré privé global (t_race), et un booléen privé global (race_alloué) pour n'allouer ce tableau qu'une seule fois.
Pour le premier objet qui utilise la classe, j'alloue ce tableau
depuis
un fichier dans le constructeur de l'objet.
Les objets suivant utilise uniquement le contenu de ce tableau mais ne l'alloue plus.
Si je test le programme (mode test sous l'éditeur), WD me dit que le tableau dynamique n'est pas libéré.
Si je rajoute en terminaison de classe la libération du tableau t_race
j'ai un message d'erreur qui dit que t_race n'est pas un objet dynamique.
Question : Comment libérer ce tableau global qui a été alloué dans le constructeur
du premier objet ?
Merci ,
Gérard.
|
| |
| |
| | | |
|
| | |
| |
Publicado el 08,agosto 2003 - 09:54 |
Je vais passer par ta solution 1, en forçant en début de projet un objet inutile que je détruirai en fin de projet. Merci
Gérard.
"Percapita" <f.lambour@everlog.com> a écrit dans le message news: 3f3273e9$1@news....
Ok, 2 solutions : 1- tu alloues ton tableau dans le code d'ouverture du projet et tu libère ton tableau dans le code de fermeture du projet. (il faut passer par des méthodes globale public car ton tableau est privé) Note : avec cette solution le tableau est alloué même si tu n'a pas d'objet instancié
2- le premier objet instancié alloue le tableau pour les suivant, le dernier > libéré libère le tableau (il va falloir compter le nombre d'instance dans un
entier long global à ta classe) Note : avec cette solution quand il n'y a plus d'objet le tableau n'est
pas alloué, qd il y a en 15 en mémoire le tableau a été alloué une seule fois.
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f3266b4@news....
Merci, Oui, mais dans ce cas, je dois recharger le tableau, qui est global à la classe, à chaque objet, donc un temps de traitement désastreux. Le tableau étant unique et global pour tout les objets, je comptais le charger en mémoire qu'une seul fois. "Percapita" <f.lambour@everlog.com> a écrit dans le message news: 3f321a35$1@news.... Moi je libererai le tableau dynamique dans le destructeur de l'objet qui
a fait son allocation (dans ton cas la première instance)
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f3128af@news.... Bjr à tous. J'utilise un tableau dynamique déclaré privé global (t_race), et un booléen privé global (race_alloué) pour n'allouer ce tableau qu'une seule fois. Pour le premier objet qui utilise la classe, j'alloue ce tableau depuis
un fichier dans le constructeur de l'objet.
Les objets suivant utilise uniquement le contenu de ce tableau mais ne
l'alloue plus.
Si je test le programme (mode test sous l'éditeur), WD me dit que le tableau dynamique n'est pas libéré.
Si je rajoute en terminaison de classe la libération du tableau t_race j'ai un message d'erreur qui dit que t_race n'est pas un objet dynamique.
Question : Comment libérer ce tableau global qui a été alloué dans le constructeur du premier objet ?
Merci ,
Gérard.
|
| |
| |
| | | |
|
| | |
| |
Publicado el 08,agosto 2003 - 13:41 |
Inutile d'instancier un objet puisque ton tableau est global (donc un membre de classe et non d'instance) Exemple (si tu le rend public)
MaClasse::MonTableau = alloue ...
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f334624@news....
Je vais passer par ta solution 1, en forçant en début de projet un objet inutile que je détruirai en fin de projet. Merci Gérard. "Percapita" <f.lambour@everlog.com> a écrit dans le message news: 3f3273e9$1@news.... Ok, 2 solutions : 1- tu alloues ton tableau dans le code d'ouverture du projet et tu libère
ton tableau dans le code de fermeture du projet. (il faut passer par des méthodes globale public car ton tableau est privé) Note : avec cette solution le tableau est alloué même si tu n'a pas d'objet instancié
2- le premier objet instancié alloue le tableau pour les suivant, le dernier libéré libère le tableau (il va falloir compter le nombre d'instance dans
un entier long global à ta classe) Note : avec cette solution quand il n'y a plus d'objet le tableau n'est pas alloué, qd il y a en 15 en mémoire le tableau a été alloué une seule fois.
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f3266b4@news.... Merci, Oui, mais dans ce cas, je dois recharger le tableau, qui est global à la
classe, à chaque objet, donc un temps de traitement désastreux. Le tableau étant unique et global pour tout les objets, je comptais le charger en mémoire qu'une seul fois. "Percapita" <f.lambour@everlog.com> a écrit dans le message news: 3f321a35$1@news.... Moi je libererai le tableau dynamique dans le destructeur de l'objet qui a fait son allocation (dans ton cas la première instance)
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f3128af@news.... Bjr à tous. J'utilise un tableau dynamique déclaré privé global (t_race), et un
booléen privé global (race_alloué) pour n'allouer ce tableau qu'une seule fois. Pour le premier objet qui utilise la classe, j'alloue ce tableau depuis
un fichier dans le constructeur de l'objet.
Les objets suivant utilise uniquement le contenu de ce tableau mais
ne l'alloue plus.
Si je test le programme (mode test sous l'éditeur), WD me dit que le
tableau dynamique n'est pas libéré.
Si je rajoute en terminaison de classe la libération du tableau t_race j'ai un message d'erreur qui dit que t_race n'est pas un objet dynamique.
Question : Comment libérer ce tableau global qui a été alloué dans le constructeur
du premier objet ?
Merci ,
Gérard.
|
| |
| |
| | | |
|
| | |
| |
Publicado el 08,agosto 2003 - 16:31 |
OK, Mais cette classe est portée dans pls appli (5.5 & 7.5), et la portabilité est une priorité. C'est pour cela, que dans le code de l'appli, je ne veux qu'utiliser des objet, et non pas instencier des membres globaux, ce qui m'obligerais à faire du copier/coller au niveau du code des applis, alors que ma classe est dans le dictionnaire, et un seul click de la classe me permet de la charger.
Mais les dictionnaires me direz-vous !... oui, mais ça ralenti énormément.
Salut
Gérard.
"Percapita" <f.lambour@everlog.com> a écrit dans le message news: 3f337b4e@news.... > Inutile d'instancier un objet puisque ton tableau est global (donc un membre
de classe et non d'instance) Exemple (si tu le rend public)
MaClasse::MonTableau = alloue ...
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f334624@news....
Je vais passer par ta solution 1, en forçant en début de projet un objet inutile que je détruirai en fin de projet. Merci Gérard. "Percapita" <f.lambour@everlog.com> a écrit dans le message news: 3f3273e9$1@news.... Ok, 2 solutions : 1- tu alloues ton tableau dans le code d'ouverture du projet et tu libère ton tableau dans le code de fermeture du projet. (il faut passer par des
méthodes globale public car ton tableau est privé) Note : avec cette solution le tableau est alloué même si tu n'a pas
d'objet instancié
2- le premier objet instancié alloue le tableau pour les suivant, le dernier libéré libère le tableau (il va falloir compter le nombre d'instance dans un entier long global à ta classe) Note : avec cette solution quand il n'y a plus d'objet le tableau n'est pas alloué, qd il y a en 15 en mémoire le tableau a été alloué une seule
fois.
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f3266b4@news.... Merci, Oui, mais dans ce cas, je dois recharger le tableau, qui est global à
la classe, à chaque objet, donc un temps de traitement désastreux. Le tableau étant unique et global pour tout les objets, je comptais le
charger en mémoire qu'une seul fois. "Percapita" <f.lambour@everlog.com> a écrit dans le message news: 3f321a35$1@news.... Moi je libererai le tableau dynamique dans le destructeur de l'objet
qui a fait son allocation (dans ton cas la première instance)
"Gerard" <gkcc@wanadoo.fr> a écrit dans le message de news:3f3128af@news.... Bjr à tous. J'utilise un tableau dynamique déclaré privé global (t_race), et
un booléen privé global (race_alloué) pour n'allouer ce tableau qu'une seule
fois. Pour le premier objet qui utilise la classe, j'alloue ce tableau depuis
un fichier dans le constructeur de l'objet.
Les objets suivant utilise uniquement le contenu de ce tableau mais ne l'alloue plus.
Si je test le programme (mode test sous l'éditeur), WD me dit que
le tableau dynamique n'est pas libéré.
Si je rajoute en terminaison de classe la libération du tableau t_race j'ai un message d'erreur qui dit que t_race n'est pas un objet dynamique. Question : Comment libérer ce tableau global qui a été alloué dans le constructeur
du premier objet ?
Merci ,
Gérard.
|
| |
| |
| | | |
|
| | |
| |
Publicado el 11,agosto 2003 - 18:43 |
Ce que tu as besoin de faire, c'est donc, en parallèle de créer le tableau global dans le premier objet créé, détruire le tableau global dans le dernier objet détruit...
Pour ça, tu ajoute un membre global lInstances que tu incrémente dans le constructeur et décrémente dans le destructeur.
Si, après décrémentation dans le destructeur, lInstances vaut 0, alors tu détruit le tableau global.
Cordialement
"Gerard" <gkcc@wanadoo.fr> wrote:
Bjr à tous. J'utilise un tableau dynamique déclaré privé global (t_race), et un booléen privé global (race_alloué) pour n'allouer ce tableau qu'une seule fois.
Pour le premier objet qui utilise la classe, j'alloue ce tableau depuis un
fichier dans le constructeur de l'objet.
Les objets suivant utilise uniquement le contenu de ce tableau mais ne l'alloue plus.
Si je test le programme (mode test sous l'éditeur), WD me dit que le tableau dynamique n'est pas libéré.
Si je rajoute en terminaison de classe la libération du tableau t_race j'ai
un message d'erreur qui dit que t_race n'est pas un objet dynamique.
Question : Comment libérer ce tableau global qui a été alloué dans le constructeur du
premier objet ?
Merci ,
Gérard.
|
| |
| |
| | | |
|
| | | | |
| | |
|