|
|
|
|
|
- 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
Gestion avancée des instances de classes
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.
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. 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 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> 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
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|