2.0 KiB
17. Construction et destruction
17.1 Constructeur unique — V1 REQUIS — FIGÉ
Une classe ou struct possède au maximum un construct effectif explicite ou synthétique.
Pas de surcharge de constructeur.
17.2 Visibilité de construct — V1 REQUIS — FIGÉ
Classe :
private
protected
module
package
public
Struct :
private
module
package
public
unsafe construct est autorisé si l'appelant doit garantir des invariants que le compilateur ne peut pas vérifier.
17.3 Construction dérivée — V1 REQUIS — FIGÉ
Chaque classe possède son propre constructeur effectif ; les constructeurs ne sont pas hérités comme des méthodes.
Le compilateur peut synthétiser un constructeur à partir :
- du constructeur effectif du parent immédiat ;
- des nouveaux champs qui nécessitent une initialisation.
Chaîne :
C -> B -> A
Jamais C -> A directement.
17.4 super::construct(...) — V1 REQUIS — FIGÉ
Il doit être exécuté exactement une fois sur chaque chemin de construction valide avant toute utilisation de l'état parent via this/super.
Il n'a pas besoin d'être textuellement la première instruction : des calculs locaux indépendants peuvent le précéder.
Le compilateur doit prouver la definite construction.
Avant construction du parent, sont notamment interdits :
this::field
this::method()
super::method()
escape/capture/pass de this
17.5 Destructeur — V1 REQUIS — FIGÉ EN PRINCIPE
Au maximum un destruct effectif.
Le destructeur est un hook de lifecycle automatiquement invoqué.
Il n'est pas appelable directement par le programmeur et ne possède donc pas de visibilité utilisateur normale.
destruct() {
...
}
S'il doit effectuer des opérations unsafe, il utilise un bloc unsafe interne.
17.6 Fallibilité de construct/destruct — V1 REQUIS — À FINALISER
Le lien exact avec Result, exceptions, construction partielle et cleanup doit être fermé avec le modèle mémoire et les exceptions.