Интересно, есть ли «уловка», которая позволяет узнать, были ли используемые объекты в части кода правильно (полностью) удалены или, другими словами, не создают утечек памяти.
Допустим, у меня есть контейнер объектов GDI (или другой, который мне нужно явно удалить)
public class SuperPen
{
Pen _flatPen, _2DPen, _3DPen;
public SuperPen()
{
_flatPen = (Pen)Pens.Black.Clone();
_2DPen = (Pen)Pens.Black.Clone();
_3DPen = (Pen)Pens.Black.Clone();
}
}
Теперь, когда мне нужно удалить объекты GDI, я делаю:
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; }
}
}
Подобная ситуация может произойти, если вы добавите новый «одноразовый» объект и забудете его удалить и т. Д. Как я могу обнаружить свою ошибку, я имею в виду, проверить, правильно ли был удален мой SuperPen?
Pens.Black
? Но, может быть, оно используется только для иллюстрации вопроса? - person Fredrik Mörk   schedule 02.02.2010= new Pen(Color.Black);
- сделайте это, потому что покажите, что мой объект был создан и, наконец, ему понадобится свободное удаление/память. - person serhio   schedule 02.02.2010