如何在循环中正确重用TMemoryStream。例如,我有一个计时器,我正在TMemoryStream对象中直接从Internet下载。
此对象声明为全局变量:
TMemoryStream *ms;
然后我在计时器功能中使用它:
ms = new TMemoryStream;
.... other operations with ms ....
然后我在其他功能中使用它,我最后不需要这个流并想要清空它,我这样做:
delete ms;
然后再次被称为相同的计时器功能,它执行相同的循环分配和解除分配。这是正确的吗?
或者我应该ms-> Clear()或ms-> Free()在我的上一个函数中,不再需要流?
我对如何重用相同的全局变量来读取流(allocate)和清空流(deallocate)感兴趣。
答案 0 :(得分:0)
Free()
是Delphi与C ++ delete
的等价物 - 对象被破坏了。如果您只想重复使用同一个对象,但每次都清空其内容,请使用Clear()
。请记住,在某些时候,当您不再使用它时,您需要调用delete
来释放该对象。
答案 1 :(得分:0)
通常,在计时器中实例化和释放对象并不危险或错误,因为在线程调用可能时,计时器调用没有重叠。正如雷米所说,最好只在计时器中使用清除(),在结束时使用OnDestroy中的删除流或形成析构函数( __ fastcall ~TForm1())。