释放变体 VarArray

发布于 2024-08-05 05:07:46 字数 444 浏览 6 评论 0原文

FUNCTION SystemspartsClT.KeyFound(Key : AluCostDict.SystemspartskeyT) : BOOLEAN;
VAR v :  Variant;
BEGIN
   v      := VarArrayCreate([0,1], VarInteger);
   v[0]   := Key.System;
   v[1]   := Key.PartType;
   Sucess := t.Locate('System;PartType', v, []);
   v      := NULL;
   Result := Sucess;
END;

我正在使用 Delphi for Win32。

这个函数是否会造成内存泄漏?

我应该将变体 v 作为 vararray 释放吗?如何释放?

我应该释放或初始化本地变体 v 吗?

FUNCTION SystemspartsClT.KeyFound(Key : AluCostDict.SystemspartskeyT) : BOOLEAN;
VAR v :  Variant;
BEGIN
   v      := VarArrayCreate([0,1], VarInteger);
   v[0]   := Key.System;
   v[1]   := Key.PartType;
   Sucess := t.Locate('System;PartType', v, []);
   v      := NULL;
   Result := Sucess;
END;

I am using Delphi for Win32.

Does this function create a memory leak or not ?

Should I free the variant v as vararray and how?

Should I free or initialize the local variant v?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

但可醉心 2024-08-12 05:07:46

这不是泄漏,但对于相当简单的任务来说,代码太多了。尝试:

FUNCTION SystemspartsClT.KeyFound(
    Key : AluCostDict.SystemspartskeyT) : BOOLEAN;
BEGIN
   Result := t.Locate('System;PartType', 
                 VarArrayOf([Key.System, Key.PartType]), []);
END;

It's not a leak, but it's way too much code for a fairly simple task. Try:

FUNCTION SystemspartsClT.KeyFound(
    Key : AluCostDict.SystemspartskeyT) : BOOLEAN;
BEGIN
   Result := t.Locate('System;PartType', 
                 VarArrayOf([Key.System, Key.PartType]), []);
END;
小矜持 2024-08-12 05:07:46

不,不,不。变体和变体数组由编译器管理。它们在创建时被初始化,并在超出范围时被释放。他们可能造成内存泄漏的唯一方法是,如果您将一个对象分配给变体的值,然后忘记释放它。

No, no and no. Variants and variant arrays are managed by the compiler. They get initialized when you create them and freed when they go out of scope. The only way they could create a memory leak is if you assigned an object to the variant's value then forgot to free it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文