Delphi 为什么释放非空TList不会导致内存泄漏?

Delphi 为什么释放非空TList不会导致内存泄漏?,delphi,generics,memory-leaks,int64,tlist,Delphi,Generics,Memory Leaks,Int64,Tlist,释放not empty TList不会导致内存泄漏,因为Integer在大小上等于指针,TList可以完美地处理指针。这是我所能理解的。释放not empty TList也不会导致内存泄漏,因为字符串本身是一个指针,当不再需要它时,会在Delphi内部的某个地方小心地释放它 然而,释放任何非空的TList总是会产生内存泄漏,这是可以理解的 我不明白的是为什么释放not empty TList不会产生内存泄漏 很抱歉,这是一个noob问题。TList只是T的动态数组的包装器。T的动态数组是托管类型

释放not empty TList不会导致内存泄漏,因为Integer在大小上等于指针,TList可以完美地处理指针。这是我所能理解的。释放not empty TList也不会导致内存泄漏,因为字符串本身是一个指针,当不再需要它时,会在Delphi内部的某个地方小心地释放它

然而,释放任何非空的TList总是会产生内存泄漏,这是可以理解的

我不明白的是为什么释放not empty TList不会产生内存泄漏

很抱歉,这是一个noob问题。

TList只是T的动态数组的包装器。T的动态数组是托管类型,因此不需要显式销毁

这将保留数组的元素。由于Int64是一种值类型,因此不需要显式销毁

一般来说,你只需要摧毁你创造的东西。你创建了这个列表,你需要销毁它。您没有创建元素本身,因此不需要销毁它们

TList只是T的动态数组的包装器。T的动态数组是托管类型,因此不需要显式销毁

这将保留数组的元素。由于Int64是一种值类型,因此不需要显式销毁


一般来说,你只需要摧毁你创造的东西。你创建了这个列表,你需要销毁它。您没有创建元素本身,因此不需要销毁它们

在任何列表之外,你必须释放一个Int64吗?@Jerry Dodge。不,从来没有。这就是为什么。数组也一样。在任何列表之外,你必须释放一个Int64吗?@Jerry Dodge。不,从来没有。这就是为什么。数组也一样。非常感谢您的澄清。当然,我混淆了类型和类。@LURD它不是桌面编译器中的类,对吗?在这里苦苦挣扎。@DavidHeffernan我不同意你对一般规则的定义。为什么?通过调用sone API,API本身可能会创建一些对象,然后简单地将对该对象的引用或句柄作为结果返回给您。在这种情况下,您仍然必须在使用完该对象后销毁它。但你不能创造它。嗯,不是直接的。我的一般规则是,无论何时通过引用访问某些数据,都需要在某个时间销毁它。@Silver字符串就是引用。接口也是如此。这只是非托管引用类型。非常感谢您的澄清。当然,我混淆了类型和类。@LURD它不是桌面编译器中的类,对吗?在这里苦苦挣扎。@DavidHeffernan我不同意你对一般规则的定义。为什么?通过调用sone API,API本身可能会创建一些对象,然后简单地将对该对象的引用或句柄作为结果返回给您。在这种情况下,您仍然必须在使用完该对象后销毁它。但你不能创造它。嗯,不是直接的。我的一般规则是,无论何时通过引用访问某些数据,都需要在某个时间销毁它。@Silver字符串就是引用。接口也是如此。它只是非托管引用类型。