关于VCL组件的析构
刚刚从MFC转到VCL上,还有些不适应。
MFC中,如果我构建了一个对象,比如:
CMemDC dc;
我必须自己来进行回收,比如:
DeleteDC(&dc);
如果是用new构建的,甚至要这样:
CMemDC *pdc = new CMemDC;
DeleteDC(pdc);
delete pdc;
可是在BCB中,让我有一些困惑。比如:
有一个ListView控件,有一个按钮控件。当点击按钮的时候,为ListView添加一个Item。
我是这么写的:
TListItem *li = new TListItem(ListView1->Items);
ListView1->Items->AddItem(li);
// delete li;
我发现,如果加上最后的一句delete li,那么什么都添加不上。似乎是delete掉了刚刚添加上的那个内容。
那么,究竟应该由谁来负责delete li?是否应该在Form的OnDestroy中枚举ListView中的每个Item,依次为他们调用delete li?
TObject::Free()和TObject::FreeInstance()有什么区别?TImage::FreeImage()呢?我在delete指针前是否要先调用这几个函数?