首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

在析构函数里开释内存报错

2013-06-25 
在析构函数里释放内存报错本人开发了一个控件,控件里有个成员变量TImage *ForeLayer在构造函数是为此变量

在析构函数里释放内存报错
本人开发了一个控件,控件里有个成员变量TImage *ForeLayer;
在构造函数是为此变量分配内存ForeLayer = new TImage(NULL);
在析构函数里释放内存:
if (ForeLayer != NULL)
    ForeLayer->Free();
将此控件拖到Form上运行时一切正常,当关闭程序时,报内存错误,就是因为析构函数里释放内存时产生的,这是为什么?     
[解决办法]
補充 :
TImage 為 TObject 所繼承衍生下來的 VCL 元件...如果在創建(new)時導入擁有者(Owner)...當(Owner)銷毀時也會連帶被釋放...所以 delete 也就可以免了! 看似違反了 C++ 物件導向設計原則...此為 C++ Builder 因應 Delphi 兼容......

例 :

ForeLayer = new TImage(this); //創建時導入擁有者(Owner)

[解决办法]
owner的自动析构是在析构函数之后才执行的。

TForm 析构过程:
VCL析构事件->C++析构函数(子类析构)->析构挂在Owner上的部件(父类析构)->析构栈

热点排行