Интересно, существует ли «хитрость», позволяющая узнать, правильно ли (полностью) расположены использованные объекты в части кода, или, другими словами, не создает утечек памяти.
Допустим, у меня есть контейнер объектов 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?