Différencier la construction de l'initialisation
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
VAR
UneInstance: TMaClasse
Begin
UneInstance:= TMaClasse.Create(1); //création
UneInstance.Create(2); //Simple initialisation sans création
End;
Constructor TMaClasse.Create(const i: integer);
Begin
IF (quelquechose) THEN //Je cherche quoi mettre dans ce test à la place de «quelquechose»
RAISE ECetteInstanceNePeutPasEtreInitialiseeDeuxFois.Create('Les instances de TMaClasse sont constantes après la création et ne peuvent pas être modifiées.');
fi:=i;
End; |
Existe-il une variable ou une fonction qui permettrait de différencier entre les deux utilisations d'un constructeur?
En C++ le problème ne se poserait même pas par ce qu'un constructeur n'est pas utilisable en tant que fonction normale. Il faut dire que C++ a des siècles d'avance sur Free Pascal dans le domaine des instances constantes par ce que les attributs d'une classe peuvent être déclarées constants et initialisés dans la liste d'initialisation du constructeur et qu'une instance de classe peut être déclarée constante.