我不知道是否有一個「技巧」,可以知道部分代碼中使用的對象是否已被正確(完全)處理,換句話說不會產生內存泄漏。如何檢查我的物品是否妥善處理?
比方說,我有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是否妥善處理?
我自發的,雖然是「爲什麼你克隆筆?黑」?但它也許只是用來說明這個問題? – 2010-02-02 16:36:10
@Frederik:只是一種初始化「空」筆的方法。我也可以這樣做'=新筆(Color.Black);' - 這樣做是因爲顯示我的對象已經創建並且最終將需要釋放處理器/內存。 – serhio 2010-02-02 19:00:54