PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • 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 WatchCatalystUniversal Windows 10 AppWindows Mobile
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.
Versions 16 et supérieures
Universal Windows 10 App Cette fonctionnalité est disponible pour les applications Windows Phone.
Nouveauté 16
Universal Windows 10 App Cette fonctionnalité est disponible pour les applications Windows Phone.
Universal Windows 10 App Cette fonctionnalité est disponible pour les applications Windows Phone.
Versions 17 et supérieures
iPhone/iPad Cette fonctionnalité est disponible pour les applications iPhone/iPad.
Nouveauté 17
iPhone/iPad Cette fonctionnalité est disponible pour les applications iPhone/iPad.
iPhone/iPad Cette fonctionnalité est disponible pour les applications iPhone/iPad.
Versions 18 et supérieures
Universal Windows 10 App Cette fonctionnalité est disponible en mode Windows Store apps.
Widget Android Cette fonctionnalité est disponible en mode Widget Android.
Nouveauté 18
Universal Windows 10 App Cette fonctionnalité est disponible en mode Windows Store apps.
Widget Android Cette fonctionnalité est disponible en mode Widget Android.
Universal Windows 10 App Cette fonctionnalité est disponible en mode Windows Store apps.
Widget Android Cette fonctionnalité est disponible en mode Widget Android.
Versions 21 et supérieures
Universal Windows 10 App Cette fonctionnalité est disponible en mode Universal Windows 10 App.
Apple Watch Cette fonctionnalité est disponible en mode Apple Watch.
Nouveauté 21
Universal Windows 10 App Cette fonctionnalité est disponible en mode Universal Windows 10 App.
Apple Watch Cette fonctionnalité est disponible en mode Apple Watch.
Universal Windows 10 App Cette fonctionnalité est disponible en mode Universal Windows 10 App.
Apple Watch Cette fonctionnalité est disponible en mode Apple Watch.
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.
Versions 16 et supérieures

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
Nouveauté 16

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

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.
AndroidJava 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