DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / POO (Programmation Orientée Objet)
  • Présentation
  • Références faibles et références fortes
  • Exemples de références
  • Référence forte
  • Référence faible
  • Destructeur forcé
  • Equivalence
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
Gestion avancée des instances de classes
Présentation
La gestion avancée des instances permet de choisir le mode de prise de référence. Ce choix impacte directement la libération des objets de classe : selon la prise de référence choisie, le "Destructeur" ne sera pas appelé au même moment.
Il existe deux modes de prise de référence :
  • la référence faible.
  • la référence forte.
Rappel : La prise de référence permet de référencer la même zone de données que l'élément source. Par exemple, deux variables pointent sur le même objet de classe. Pour prendre référence sur un objet, il suffit d'utiliser l'opérateur <-.
Important : Dans tous les cas, il est possible de forcer l'appel au destructeur grâce au mot-clé "Libérer".
Références faibles et références fortes
Deux types de prise de référence sont disponibles :
  • La référence forte (par défaut) : Dans ce cas, l'objet de classe sera libéré uniquement lorsque toutes les références de l'objet auront été libérées.
  • La référence faible : Dans ce cas, les objets seront libérés automatiquement selon leur portée (même si une référence globale a été prise sur ces objets). La référence faible doit être indiquée lors de l'instanciation dynamique de l'objet prenant référence.
    Universal Windows 10 App La gestion des références faibles n'est pas disponible.
Pour indiquer une référence faible, utilisez la syntaxe suivante :
Reference est un objet Classe1 dynamique, faible
ou bien :
Reference est un objet Classe1 dynamique <faible>
Remarque : Il est possible de forcer la prise de référence faible pour tous les objets avec la syntaxe suivante :
ModeExécution(ForceDestructeurObjetNonDynamique)
Attention : Ce fonctionnement est global à toute l'application et risque de perturber le fonctionnement des composants.
Exemples de références

Référence forte

A la fin de la procédure, l'objet "MonObjet" n'est pas libéré (le destructeur n'est pas appelé). L'objet "MonObjet" sera libéré lorsque "ReferenceGlobale" sera libéré. "MonObjet" sera donc libéré à la fermeture de la fenêtre.
// Déclarations globales de la fenêtre : instanciation dynamique d'un objet Classe1
ReferenceGlobale est un objet Classe1 dynamique
// Procédure locale de la fenêtre
PROCÉDURE ProcédureLocaleFenêtre()
 
// Instanciation d'un objet Classe1
MonObjet est un objet Classe1
 
// Prise de référence forte sur l'objet MonObjet.
ReferenceGlobale <- MonObjet

Référence faible

A la fin de la procédure, l'objet "MonObjet" est libéré (le destructeur est appelé) et "ReferenceGlobale" vaut NULL.
// Déclarations globales de la fenêtre : instanciation dynamique d'un objet Classe1
ReferenceGlobale est un objet Classe1 dynamique, faible
// Procédure locale de la fenêtre
PROCÉDURE ProcédureLocaleFenêtre()
 
// Instanciation d'un objet Classe1
MonObjet est un objet Classe1
 
// Prise de référence faible sur l'objet MonObjet.
ReferenceGlobale <- MonObjet
Destructeur forcé
Il est possible de forcer l'appel du destructeur (libérer l'objet) même si une référence forte a été prise sur cet objet.
Pour forcer l'appel au destructeur, utilisez la syntaxe suivante :
// Le destructeur sera appelé à la fin de la portée de la variable
// (même si une référence forte a été prise sur cet objet)
MonObjet est un objet Classe1, force Destructeur
ou bien :
// Le destructeur sera appelé à la fin de la portée de la variable
// (même si une référence forte a été prise sur cet objet)
MonObjet est un objet Classe1 <force Destructeur>

Universal Windows 10 App Cette fonctionnalité n'est pas disponible.

Equivalence

Les codes suivants (exemple 1 et exemple 2) sont équivalents. Dans les deux cas, l'objet sera libéré à la fin de la procédure.
Exemple 1 :
// Déclarations globales de la fenêtre
// Instanciation dynamique d'un objet Classe1
ReferenceGlobale est un objet Classe1 dynamique, faible
// Procédure locale de la fenêtre
PROCÉDURE ProcédureLocaleFenêtre()
 
// Instanciation d'un objet Classe1
MonObjet est un objet Classe1
 
// Prise de référence faible sur l'objet MonObjet.
ReferenceGlobale <- MonObjet
Exemple 2 :
// Déclarations globales de la fenêtre
// Instanciation dynamique d'un objet Classe1
ReferenceGlobale est un objet Classe1 dynamique
// Procédure locale de la fenêtre
PROCÉDURE ProcédureLocaleFenêtre()
 
// Instanciation d'un objet Classe1
MonObjet est un objet Classe1, force Destructeur
 
// Prise de référence faible sur l'objet MonObjet.
ReferenceGlobale <- MonObjet
Version minimum requise
  • Version 16
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 25/05/2022

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