Bonjours aux pro du Windev,
j'aurai voulu savoir si comme Java, Windev possède un ramasse-miette.
S'il n'en possède pas ça veut dire qu'il faut que je fasse quelque chose du genre "libérer(MoiMeme)" dans les destructeurs de mes classes ?
Bonjours aux pro du Windev,
j'aurai voulu savoir si comme Java, Windev possède un ramasse-miette.
S'il n'en possède pas ça veut dire qu'il faut que je fasse quelque chose du genre "libérer(MoiMeme)" dans les destructeurs de mes classes ?
Bonjour,
Oui, il y a un "ramasse-miette" dans Windev.
Ce qui ne m'empêche pas de libérer mes objets dynamiques quand je n'en ai plus besoin, par habitude sans doute...
Tatayo.
Merci pour l'info tatayo!
Je pense que c'est une bonne habitude. En principe, tu dois nettoyer la mémoire avant le ramasse-miette.Envoyé par Tatayo
Bonjour,
La plupart du temps c'est plus simple de déclarer des objets "pas dynamiques" sans allouer ni libérer, et jouer sur leur portée.
Il faut aussi comprendre la différence entre : Toto = Null et libérer Toto.
Dans le 1er cas je supprime une référence, mais s'il en existe d'autres, l'objet existe toujours.
Dans le 2ème cas l'objet est supprimé et toutes les références à cet objet sont mises à Null.
Enfin, un objet "pas dynamique" est en réalité implicitement "dynamique" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Toto est un ClasseToto Titi est un objet dynamique = Toto libérer Titi SI Toto = Null ALORS // On a supprimé un objet "non dynamique". En réalité c'était une référence. FIN
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 PROCEDURE DonneToto() Toto est un ClasseToto Titi est un ClasseToto dynamique = Toto RENVOYER Titi // L'objet Toto existera toujours alors qu'il est hors de portée. En réalité c'était une référence comme une autre.
Hibernatus34 merci de soulever le problème. Tu es vraiment très fort! Tu as anticipé la question que j'allais poser 3h plus tard!
J'aurai besoin de comprendre la différence entre un objet et un objet dynamique, pour pour faire les utiliser dans une classe.
Je m'explique :
J'ai deux classes, ListeComptes et Compte.
La classe ListeComptes possède un tableau de Compte.
- Je ne sais pas comment déclarer et initialiser mon tableau.
J'ai fait un essai avec ce code :
Dois-je utiliser des Compte dynamique ou statique ? Pourquoi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ListeComptes est une classe tabComptes est un tableau dynamique de Compte dynamique FIN PROCEDURE Constructeur() :tabComptes = allouer un tableau de 0 Compte dynamique
- Ensuite, je ne sais pas si ma fonction supprimer est correcte :
Si cpt est une référence sur le Compte trouvé, ma méthode est correcte. Seulement, s'il s'agit d'un nouvel objet, elle ne marchera pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 // nom est le nom du compte que je souhaite supprimer PROCEDURE supprCompte(nom est une chaine) cpt est un objet dynamique Compte cpt = :trouverCompte(nom) IF cpt <> Null THEN TableauSupprime(:tabComptes, nom) RENVOYER True ELSE RENVOYER False END
Pour faire plus simple, dans ce type de cas, quand dois-je utiliser un objet dynamique ?
Si tu utilises un tableau d'objets dynamiques, l'allocation du tableau te donne un tableau... de null. Il te faut alors instancier les objets dans le tableau.
Si tu utilises un tableau d'objets, le fait de dimensionner le tableau instancie de fait les objets contenus.
Quelle méthode prendre ? Ca dépend (et quand ça dépend... ):
Si le constructeur de ta classe attend un paramètre et qu'il n'a pas de valeur par défaut, tu n'as pas d'autre choix(à ma connaissance) que d'utiliser un tableau d'objets dynamiques. De même si tu veux utiliser le polymorphisme.
Dans ton cas je dirai que tu peux utiliser un tableau dynamique d'objets.
Tatayo.
Ok, mais je vais utiliser les objets dynamiques, qui sont plus dans la philosophie objet, et dans mes habitudes de programmation.
Merci pour votre aide "tatayo" et "Hibernatus34"!
Une remarque additionnelle a tout ce qui a été dit.
Elle concerne les requêtes...
Il vaut mieux penser à utiliser HlibèreRequete sous peine de voir le serveur Manta grossir et grossir en mémoire et exploser parfois.
Patrick Catella
Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.
Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition
heu... Il est pas un peu moyen le ramasse miette de WD ?
Merci pour l'info en tous cas
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager