DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Syntaxe WLangage / Mots-clés réservés
  • Cas particulier : les tableaux dynamiques
  • Cas particulier : les objets automation dynamiques
  • Cas particulier : les objets de classe et de classe dynamique
  • Libérer la place mémoire
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Libérer (Mot réservé)
En anglais : Delete
La mémoire occupée par un objet dynamique (tableau, objet de classe, ...) est automatiquement libérée lorsque l'objet n'est plus utilisé ou lors de la fermeture de l'élément (fenêtre, état, ...) dans lequel l'objet dynamique a été déclaré.
Le mot-clé Libérer permet de libérer explicitement la mémoire occupée par :
L'utilisation du mot-clé Libérer est facultative. Le mot-clé Libérer permet uniquement au développeur de disposer plus rapidement d'une mémoire disponible plus importante.
Exemple
TableauClient est un tableau dynamique
TableauClient = allouer un tableau dynamique de 4 par 7 entiers
...
// Libérer le tableau dynamique
libérer TableauClient
Syntaxe
Libérer <Nom de l'objet dynamique à libérer>
<Nom de l'objet dynamique à libérer> : Chaîne de caractères
Nom de l'objet dynamique à libérer explicitement. Cet objet dynamique peut correspondre à :
Remarques

Cas particulier : les tableaux dynamiques

  • Un tableau dynamique est automatiquement libéré en fin de vie de la variable (fermeture de la fenêtre par exemple) ou lors de l'allocation de nouvelles dimensions.
  • Si la déclaration et l'allocation du tableau dynamique est réalisée en une seule ligne de code, il ne faut pas utiliser le mot-clé Libérer pour libérer explicitement le tableau dynamique. Si le mot-clé Libérer est utilisé, une erreur d'exécution sera générée.
    Pour plus de détails sur la déclaration et l'allocation d'un tableau dynamique en une seule ligne, consultez les Tableaux dynamiques.

Cas particulier : les objets automation dynamiques

L'objet automation dynamique est automatiquement libéré à la fin du traitement contenant sa déclaration ou lors d'une nouvelle allocation de l'objet.

Cas particulier : les objets de classe et de classe dynamique

Pour libérer un objet, il est également possible d'utiliser la syntaxe suivante :
<Nom objet> = NULL

Libérer la place mémoire

Il est également possible de :
  • Libérer la place mémoire utilisée par une matrice grâce à la fonction MatSupprime.
  • Libérer la place mémoire occupée par une matrice utilisée par un graphe grâce à la fonction grSupprimeTout.
Java Cas particulier en Java/Android
La notion de destructeur n'existe pas en Java/Android. Le code situé dans le destructeur d'une classe ne sera par conséquent jamais exécuté.
Un objet est libéré par le ramasse-miette (garbage collector) lorsqu'il n'est plus référencé dans l'application. Le moment où intervient cette libération n'est pas prévisible.
Pour forcer la libération d'un objet, il est possible de l'affecter à NULL ou d'utiliser l'instruction Libérer.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
"Libérer" différent de "= Null"
Contrairement à ce qui est indiqué dans cette doc, setter un objet à Null ne revient pas au même que le libérer explicitement.

En cas de référence cyclique, mettre un objet à Null ne va pas appeler le Dtor, contrairement à "libérer" qui va forcer cet appel. Attention néanmoins la mémoire n'est pas automatiquement libérée pour autant (les cas sont nombreux, je ne vais pas les lister).

Autre différence, toujours avec deux objets qui ont chacun une réf sur l'autre: si je libère l'objet A, la réf vers A que possède B va être à Null automatiquement et l'objet A n'est donc plus disponible (sans que la mémoire ne soit forcément libérée en fonction des cas).
Si je sette simplement mon objet A à Null, la réf vers A que possède B sera toujours valable et permet d'accéder à l'objet A.
VincentRG
01 juil. 2021

Dernière modification : 25/05/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale