2012-10-05 50 views
2

这似乎是工作,但我抓我的头试图找到内存泄漏,我不是那种东西非常好:-(我需要免费()TDateTime吗?

const UNIX_START_DATE: TDateTime = 25569.0; 

function UnixToDateTime(USec: Longint): TDateTime; 
begin 
    Result := (Usec/86400) + UNIX_START_DATE; 
end; 

我不是实际调用TDateTime.Create() - 不过是编译器(这意味着我将不得不释放它soemwhere)?或者,由于TDateTime是bascially只是一个douuble,是编译器只是推栈上分配给调用者?

+1

TDateTime字段更有可能泄漏 –

+2

“TDateTime基本上只是一个双倍” - 这就是答案。这是“双”,你应该像对待“双”一样对待它。顺便说一句,如果你没有特别指出,那么你就不能释放它。 UNIX_START_DATE.Free是否可以编译? –

+0

+1 @ Arioch'The - 是的,它编译,运行并做它应该做的。我只是在这里抓着吸管,试图找到泄漏。除了TDateTime有一个构造函数(我没有检查 - 是否加倍?)之外,我甚至都不会问这个问题,我在很长一段时间内缩小了内存不足异常,并且在定时器终止时fn()被定期调用。我只是想知道。 – Mawg

回答

13

没有什么自由。TDateTime是基于Double的简单类型,因此它不是分配在堆上。

+1

Nitpick:它们可以通过'New'或'GetMem'在堆上分配。 –

+6

@DavidHeffernan:'PDateTime'当然,就像任何其他指针类型一样。我不认为这是这个话题。 –

+0

只需列出一些类似于'TDateTime'的类型,它们不需要创建/销毁,'TTime','TCaption','THandle','TNotifyEvent','TRtlCriticalSection'等等。一些被用作指针,因此需要通过标准外部接口之外的手段来创建/销毁。例如,创建一个Windows画布手柄并释放它。唯一可以创建的是某种类(或对象),以及Delphi的更高版本中的记录。 –