0

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

这个对象被声明为全局变量:

TMemoryStream *ms;

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

ms = new TMemoryStream;

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

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

delete ms;

然后再次调用相同的计时器函数,它执行相同的循环分配和释放。这是正确的方式吗?

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

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

4

2 回答 2

0

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

于 2013-08-09T16:18:55.590 回答
0

通常,在计时器中实例化和释放对象并不危险或错误,因为计时器调用没有重叠,而线程调用可能有重叠。正如 Remy 所说,最好在计时器中仅使用Clear(),并在 OnDestroy 或表单析构函数(__fastcall ~TForm1())中最后删除流。

于 2013-08-09T16:47:42.807 回答