重用TMemoryStream delphi / c ++ builder

时间:2013-08-09 13:21:21

标签: c++ delphi c++builder

如何在循环中正确重用TMemoryStream。例如,我有一个计时器,我正在TMemoryStream对象中直接从Internet下载。

此对象声明为全局变量:

TMemoryStream *ms;

然后我在计时器功能中使用它:

ms = new TMemoryStream;

.... other operations with ms ....

然后我在其他功能中使用它,我最后不需要这个流并想要清空它,我这样做:

delete ms;

然后再次被称为相同的计时器功能,它执行相同的循环分配和解除分配。这是正确的吗?

或者我应该ms-> Clear()或ms-> Free()在我的上一个函数中,不再需要流?

我对如何重用相同的全局变量来读取流(allocate)和清空流(deallocate)感兴趣。

2 个答案:

答案 0 :(得分:0)

Free()是Delphi与C ++ delete的等价物 - 对象被破坏了。如果您只想重复使用同一个对象,但每次都清空其内容,请使用Clear()。请记住,在某些时候,当您不再使用它时,您需要调用delete来释放该对象。

答案 1 :(得分:0)

通常,在计时器中实例化和释放对象并不危险或错误,因为在线程调用可能时,计时器调用没有重叠。正如雷米所说,最好只在计时器中使用清除(),在结束时使用OnDestroy中的删除流或形成析构函数( __ fastcall ~TForm1())。