> Et c'est pour çà qu'il s'appellent des finaliseurs, et pas des
destructeurs;-)
Le seul langage .NET qui implémente les destructeurs, c'est C++/CLI grâce à
la "stack semantic".
Malheureusement, appeler çà avec le même nom qu'un autre concept proche mais
subtilement et fondamentalement différent dans un langage extrêmement connu
(C++ natif), c'est une source de confusions sans fin qui ne se justifie que
par une accroche commerciale de bas étage.
> Et c'est pour çà qu'il s'appellent des finaliseurs, et pas des
destructeurs;-)
Le seul langage .NET qui implémente les destructeurs, c'est C++/CLI grâce à
la "stack semantic".
Malheureusement, appeler çà avec le même nom qu'un autre concept proche mais
subtilement et fondamentalement différent dans un langage extrêmement connu
(C++ natif), c'est une source de confusions sans fin qui ne se justifie que
par une accroche commerciale de bas étage.
> Et c'est pour çà qu'il s'appellent des finaliseurs, et pas des
destructeurs;-)
Le seul langage .NET qui implémente les destructeurs, c'est C++/CLI grâce à
la "stack semantic".
Malheureusement, appeler çà avec le même nom qu'un autre concept proche mais
subtilement et fondamentalement différent dans un langage extrêmement connu
(C++ natif), c'est une source de confusions sans fin qui ne se justifie que
par une accroche commerciale de bas étage.
Chipotons : le rôle d'un destructeur dans un langage non managé tel
que C++ ou Delphi sous Win32 est à la fois de libérer la mémoire de
l'instance autant que de libérer les ressources occupées par celle-ci
autre que de la mémoire.
On notera que la libération de la mémoire de l'instance est malgré
tout automatisée et qu'il n'y a pas besoin explicitement de la
relacher dans le destructeur. Mais c'est bien dans le destructeur que
cela a lieu. C'est le principe de destructeur déterministe.
Chipotons : le rôle d'un destructeur dans un langage non managé tel
que C++ ou Delphi sous Win32 est à la fois de libérer la mémoire de
l'instance autant que de libérer les ressources occupées par celle-ci
autre que de la mémoire.
On notera que la libération de la mémoire de l'instance est malgré
tout automatisée et qu'il n'y a pas besoin explicitement de la
relacher dans le destructeur. Mais c'est bien dans le destructeur que
cela a lieu. C'est le principe de destructeur déterministe.
Chipotons : le rôle d'un destructeur dans un langage non managé tel
que C++ ou Delphi sous Win32 est à la fois de libérer la mémoire de
l'instance autant que de libérer les ressources occupées par celle-ci
autre que de la mémoire.
On notera que la libération de la mémoire de l'instance est malgré
tout automatisée et qu'il n'y a pas besoin explicitement de la
relacher dans le destructeur. Mais c'est bien dans le destructeur que
cela a lieu. C'est le principe de destructeur déterministe.
Et c'est pour çà qu'il s'appellent des finaliseurs, et pas des
destructeurs;-)
Chipotons : le rôle d'un destructeur dans un langage non managé tel
que C++ ou Delphi sous Win32 est à la fois de libérer la mémoire de
l'instance autant que de libérer les ressources occupées par celle-ci
autre que de la mémoire.
On notera que la libération de la mémoire de l'instance est malgré
tout automatisée et qu'il n'y a pas besoin explicitement de la
relacher dans le destructeur. Mais c'est bien dans le destructeur que
cela a lieu. C'est le principe de destructeur déterministe.
Sous .NET la libération de mémoire des instances est automatisée par
le GC.
Mais il existe une méthode, Finalize, héritée de System.Object,
protégée et virtuelle, qui peut être surchargée pour libérer des
ressources.
Le langage C# implémente bien la notion de destructeur (qui se note
avec un tilde suivi du nom de la classe), ce qui n'a rien à voir avec
la méthode Finalize qui est le fameux "finaliseur" et qui est propre à
.NET et non au langage C# lui-même qui pourrait être implémenté sous
d'autres OS.
Il s'avère que le processus de libération de mémoire de .NET est non
déterministe.
Donc le destructeur et le finaliseur peuvent ne pas être
appelé.
Et comme le destructeur n'a plus la charge de libérer la mémoire sous
.NET, ça fait que son rôle devient réellement mineur.
Mais C# implémente bien la notion de destructeur, avec une syntaxe
particulière.
Le seul langage .NET qui implémente les destructeurs, c'est C++/CLI
grâce à la "stack semantic".
C++ managé est une horreur soit dit en passant.
Malheureusement, appeler çà avec le même nom qu'un autre concept
proche mais subtilement et fondamentalement différent dans un
langage extrêmement connu (C++ natif), c'est une source de
confusions sans fin qui ne se justifie que par une accroche
commerciale de bas étage.
On pourrait aussi dire que nier que C# implémente des destructeurs
uniquement parce que leur rôle se trouve affaibli sous .NET est, à mon
avis, une erreur de jugement.
Mais que cela ne te gache pas ta journée... :-)
Et c'est pour çà qu'il s'appellent des finaliseurs, et pas des
destructeurs;-)
Chipotons : le rôle d'un destructeur dans un langage non managé tel
que C++ ou Delphi sous Win32 est à la fois de libérer la mémoire de
l'instance autant que de libérer les ressources occupées par celle-ci
autre que de la mémoire.
On notera que la libération de la mémoire de l'instance est malgré
tout automatisée et qu'il n'y a pas besoin explicitement de la
relacher dans le destructeur. Mais c'est bien dans le destructeur que
cela a lieu. C'est le principe de destructeur déterministe.
Sous .NET la libération de mémoire des instances est automatisée par
le GC.
Mais il existe une méthode, Finalize, héritée de System.Object,
protégée et virtuelle, qui peut être surchargée pour libérer des
ressources.
Le langage C# implémente bien la notion de destructeur (qui se note
avec un tilde suivi du nom de la classe), ce qui n'a rien à voir avec
la méthode Finalize qui est le fameux "finaliseur" et qui est propre à
.NET et non au langage C# lui-même qui pourrait être implémenté sous
d'autres OS.
Il s'avère que le processus de libération de mémoire de .NET est non
déterministe.
Donc le destructeur et le finaliseur peuvent ne pas être
appelé.
Et comme le destructeur n'a plus la charge de libérer la mémoire sous
.NET, ça fait que son rôle devient réellement mineur.
Mais C# implémente bien la notion de destructeur, avec une syntaxe
particulière.
Le seul langage .NET qui implémente les destructeurs, c'est C++/CLI
grâce à la "stack semantic".
C++ managé est une horreur soit dit en passant.
Malheureusement, appeler çà avec le même nom qu'un autre concept
proche mais subtilement et fondamentalement différent dans un
langage extrêmement connu (C++ natif), c'est une source de
confusions sans fin qui ne se justifie que par une accroche
commerciale de bas étage.
On pourrait aussi dire que nier que C# implémente des destructeurs
uniquement parce que leur rôle se trouve affaibli sous .NET est, à mon
avis, une erreur de jugement.
Mais que cela ne te gache pas ta journée... :-)
Et c'est pour çà qu'il s'appellent des finaliseurs, et pas des
destructeurs;-)
Chipotons : le rôle d'un destructeur dans un langage non managé tel
que C++ ou Delphi sous Win32 est à la fois de libérer la mémoire de
l'instance autant que de libérer les ressources occupées par celle-ci
autre que de la mémoire.
On notera que la libération de la mémoire de l'instance est malgré
tout automatisée et qu'il n'y a pas besoin explicitement de la
relacher dans le destructeur. Mais c'est bien dans le destructeur que
cela a lieu. C'est le principe de destructeur déterministe.
Sous .NET la libération de mémoire des instances est automatisée par
le GC.
Mais il existe une méthode, Finalize, héritée de System.Object,
protégée et virtuelle, qui peut être surchargée pour libérer des
ressources.
Le langage C# implémente bien la notion de destructeur (qui se note
avec un tilde suivi du nom de la classe), ce qui n'a rien à voir avec
la méthode Finalize qui est le fameux "finaliseur" et qui est propre à
.NET et non au langage C# lui-même qui pourrait être implémenté sous
d'autres OS.
Il s'avère que le processus de libération de mémoire de .NET est non
déterministe.
Donc le destructeur et le finaliseur peuvent ne pas être
appelé.
Et comme le destructeur n'a plus la charge de libérer la mémoire sous
.NET, ça fait que son rôle devient réellement mineur.
Mais C# implémente bien la notion de destructeur, avec une syntaxe
particulière.
Le seul langage .NET qui implémente les destructeurs, c'est C++/CLI
grâce à la "stack semantic".
C++ managé est une horreur soit dit en passant.
Malheureusement, appeler çà avec le même nom qu'un autre concept
proche mais subtilement et fondamentalement différent dans un
langage extrêmement connu (C++ natif), c'est une source de
confusions sans fin qui ne se justifie que par une accroche
commerciale de bas étage.
On pourrait aussi dire que nier que C# implémente des destructeurs
uniquement parce que leur rôle se trouve affaibli sous .NET est, à mon
avis, une erreur de jugement.
Mais que cela ne te gache pas ta journée... :-)