Je me demande s'il y a une "astuce" qui permet de savoir si les objets utilisés dans une partie de code ont été correctement (entièrement) éliminés, ou, en d'autres termes, ne crée pas de fuites de mémoire.Comment vérifier si mon objet est correctement éliminé?
Disons que j'ai un conteneur d'objets GDI (ou autre que je dois disposer explicitement)
public class SuperPen
{
Pen _flatPen, _2DPen, _3DPen;
public SuperPen()
{
_flatPen = (Pen)Pens.Black.Clone();
_2DPen = (Pen)Pens.Black.Clone();
_3DPen = (Pen)Pens.Black.Clone();
}
}
Maintenant, comme je l'ai besoin de disposer les objets GDI que je fais:
public class SuperPen : IDisposable
{
Pen _flatPen, _2DPen, _3DPen;
public SuperPen()
{
_flatPen = (Pen)Pens.Black.Clone();
_2DPen = (Pen)Pens.Black.Clone();
_3DPen = (Pen)Pens.Black.Clone();
}
public void Dispose()
{
if (_flatPen != null) { _flatPen.Dispose(); _flatPen = null; }
// HERE a copy paste 'forget', should be _2DPen instead
if (_flatPen != null) { _flatPen.Dispose(); _flatPen = null; }
if (_3DPen != null) { _3DPen.Dispose(); _3DPen = null; }
}
}
Une situation comme celle-ci peut se produire si vous ajoutez un nouvel objet "jetable" et oubliez de le jeter etc. Comment puis-je détecter mon erreur, je veux dire, vérifier si mon SuperPen a été correctement éliminé?
Mon spontané cependant est "pourquoi clonez-vous' Pens.Black' "? Mais il est peut-être utilisé seulement pour illustrer la question? –
@Frederik: Juste est un moyen d'initialiser un stylo "vide". Je pourrais faire aussi '= new Pen (Color.Black);' - le faire parce que montrer que mon objet a été créé et finalement besoin d'une disposition/mémoire libre. – serhio