VCL 中的一個記憶體洩漏 Bug (轉)

worldblog發表於2007-12-14
VCL 中的一個記憶體洩漏 Bug (轉)[@more@]

在valedit.pas中,TValueListStrings類沒有實現虛擬的Destroy方法,
它實現了虛擬的Clear方法, 但是它的父類TStringList的
Destroy中並不透過Clear()來釋放資源,因此TValueListStrings
中為成員ItemProps分配的就丟失了.

所以如果在Form中新增了TValueListEditor,並且在程式碼中
使用了其ItemProperty成員(因為它是延遲分配,只有第一次使用時才分配記憶體),
則需要在Form.Destroy()方法中顯式的呼叫Clear()方法,如下:

MyForm.Destroy()
{
 ...
 MyValueListEditor->Strings->Clear();
 ...
}

這是在C++ Builder 6的VCL 中發現的, 估計 6中
也應該有這個.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993247/,如需轉載,請註明出處,否則將追究法律責任。

相關文章