为什么不调用 Destroy?

2023-11-23

鉴于以下 Delphi 代码,Foo is Free'd on FormClose, but TFoo.Destroy没有被调用 - 因此Bar is not Freed,导致内存泄漏?

我是否在这里错过了一些东西,或者 Foo.Free 在某个时候不应该调用 Foo.Destroy ?

type
  TBar = class
  SomeInteger : integer;
end;

TFoo = class
  Bar : TBar;

  constructor Create();
  destructor Destroy();
end;

var
  Foo : TFoo;

implementation

constructor TFoo.Create;
begin
  Bar := TBar.Create;
  Bar.SomeInteger := 2;
end;

destructor TFoo.Destroy;
begin
  Bar.Free;
  Bar := nil;

  showmessage('Destroyed!');
end;

procedure TForm10.FormCreate(Sender: TObject);
begin
  Foo := TFoo.Create;

  showmessage('Foo created');
end;

procedure TForm10.FormDestroy(Sender: TObject);
begin
  Foo.Free;
  Foo := nil;
end;

您必须用 override 标记析构函数的签名。

destructor Destroy(); override;

你应该有inherited在析构函数的末尾。但由于您的类不是从 TObject 以外的任何对象派生的,我怀疑这并不重要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么不调用 Destroy? 的相关文章

  • 第一个 MapActivity 实例总是泄漏吗?

    在研究应用程序中的内存问题时 发现如果应用程序 Activity 是 MapActivity 则它的第一个实例将不会最终确定 导致其他内存泄漏 例如传递给setContentView的视图 之前有人注意到吗 下面的测试代码显示 MainAc
  • 我可以在“Delphi 2007 for Win32”中使用.NET DLL吗?

    是否可以在 Delphi 2007 for Win32 中使用 NET DLL 我尝试以与 ActiveX 组件相同的方式导入 DLL 但它似乎不起作用 组件菜单 gt 导入组件 gt 导入 NET 程序集 是否可能 如果可以 步骤是什么
  • 避免内存泄漏

    所以我正在学习 C 中的 OOP 我认为编写自己的字符串类是一个很好的实践 当然是为了学习目的 我提出了一个我不知道如何解决的问题 这是一些和平的代码 class String char str public String char con
  • 加载 Jpg/Gif/Bitmap 并转换为 Bitmap

    我必须从 XML 文件加载图像 XML 文件中没有关于图像是否为 JPG GIF BMP 的信息 加载图像后 我需要将其转换为位图 有谁知道如何在不知道实际文件格式的情况下将图像转换为位图 我正在使用 Delphi 2007 2009 谢谢
  • Delphi线程死锁

    我有时会在销毁某些线程时遇到死锁问题 我尝试过调试该问题 但在 IDE 中调试时似乎从未存在死锁 可能是因为 IDE 中的事件速度较低 问题 当应用程序启动时 主线程会创建多个线程 线程始终处于活动状态并与主线程同步 完全没有问题 当应用程
  • spring-cloud-starter-hystrix 和 spring-cloud-starter-archaius 集成的内存泄漏问题

    我们将 spring cloud starter hystrix 与 spring cloud starter archaius 一起使用 一旦战争取消部署 我们就无法停止 archaius 的 poolingconfigurationSo
  • 该处理程序类应该是静态的,否则可能会发生泄漏(com.test.test3.ui.MainActivity.1)

    我是 android 新手 我尝试开发一个系统 但是当我完成代码时 处理程序显示此警告 下面显示了我编辑后的代码 事件onouch中的处理程序显示警告处理程序无法解析 我尝试将 忽略处理程序 然后尝试运行应用程序及其结果强制关闭 publi
  • Firemonkey 编辑/组合自动完成/打字时自动建议

    实施方式是什么Autocomplete or Autosuggest适用于 Windows Android 平台以及 MacOS 和 iOS 的 Delphi Firemonkey Example 当用户在 Google 搜索框中输入文本时
  • 如何根据输入的内容过滤组合框的内容?

    我们有一个包含 100 多个项目的组合框 当我们在组合框中输入字符时 我们想要过滤掉项目 例如 如果我们输入 ac 并单击下拉选项 那么我们希望它仅显示以 ac 开头的项目 我怎样才能做到这一点 也许您会更喜欢使用操作系统内置的自动完成功能
  • Delphi - 在修复 VCL 错误时,单元 x 是用不同版本的 x 编译的

    我正在使用 Delphi XE6 并在我的项目中使用 Datasnap 和 JSON 我想纠正 VCL 单元 System JSON pas 在 TJSONString ToString 函数中 中的一个错误 它应该转义反斜杠字符和引号 为
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • 有人用CrossKylix进行真正的跨平台开发吗?

    新版本克罗斯凯利克斯 http crosskylix untergrund net 两周前更新过 即使 Kylix 已经停产很久了 但它似乎仍然被一些 Delphi 开发人员使用 有人在 Windows 和 Linux 的跨平台开发中成功使
  • 如何在Delphi中下载一个非常简单的HTTPS页面?

    我尝试了在这里看到的代码 但它不适用于 HTTPS 我需要将此页面作为字符串下载 并在其上添加一些换行符 以便将信息按顺序放入 TMemo 中 怎么做 我尝试使用 Indy 但由于 SSL 问题而失败 我尝试了此页面的解决方案 如何将网页下
  • Java:BufferedReader 在 close() 上永远挂起,并且 StreamDecoder 不尊重线程中断

    我有一个 Java 程序 它启动一个由 Process 类表示的单独子进程 然后附加查看 Process 的 stdout stderr 的侦听器 在某些情况下 进程将挂起并停止取得进展 此时 TimeLimiter 将抛出 Timeout
  • Delphi 返回 TList 时出错

    我做了一个非常简单的应用程序 但我有一个我真的无法理解的问题 看一下这个基本代码 unit Unit1 interface uses Winapi Windows Winapi Messages System SysUtils System
  • 处理 TShellListView 后代中的文件放置

    我正在尝试创建 TShellListView 的后代 它接受从 Windows 资源管理器中删除的文件 我想在组件定义中处理拖 放操作 而不必在任何使用该组件的应用程序中实现它 我找到了接受从 Windows 资源管理器中拖放的文件的示例
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • 不断断点?如何去除它们?

    我下载了一个用Delphi 2009制作的项目 这也是我使用的 但是有一个断点我无法删除 如果我尝试删除它 它会在程序执行后再次执行 我在其他调试器中遇到了这样的事情 称为硬件断点 但这并不重要 如何删除断点 EDIT Article ht
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • TObjectList.Contains 导致 Delphi 2009 中的访问冲突

    在 Delphi 2009 中 到目前为止 我在泛型方面没有遇到大问题 使用 Generics Collections 列表 没有特殊的泛型功能 现在我发现这段代码会在访问的行中导致AVMyList Contains 如果我声明 TMyLi

随机推荐

  • 计算字符串出现次数并绘制直方图

    是否有任何直接的方法可以从像下面这样的元胞数组创建直方图 连续条之间的间距应该完全相同 x 轴的标签应该是垂直方向下面的变量的相应名称 w464 w462 w461 w464 w461 w463 w466 w461 我也想知道更好的方法 F
  • 主题和行为主题有什么区别?

    我不清楚 a 之间的区别Subject and a BehaviorSubject 难道只是一个BehaviorSubject有getValue 功能 行为主体持有一个值 当它被订阅时 它会立即发出该值 主题不具有值 主题示例 使用 RxJ
  • 在 Windows 上使用 mkbundle 创建 C# 可执行文件

    我正在尝试从控制台应用程序创建可执行文件 我已经安装了 mono cygwin mingw gcc mingw zlib1 mingw zlib devel pkg config 并将以下几行添加到我的 bashrc 文件中 export
  • 使用CSS和Javascript的无限旋转动画[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我浏览了一些单页网站示例并发现了这一点 http alwayscreative net 我对背景中无限旋转的圆盘感到非常惊讶 我看过一些例子 但没有一个是这样工作的 谁能告诉我这
  • 如何停止核心动画?

    我现在正在使用核心动画为按钮设置动画 在某种情况下我想停止该动画 如何停止动画 这是为按钮设置动画的方法 void animateButton UIButton btnName CABasicAnimation pulseAnimation
  • 为什么 C++ 允许未命名函数参数?

    以下是完全合法的C code void foo int cout lt lt Yo lt lt endl int main int argc char const argv foo 5 return 0 我想知道 考虑到无法从函数内部引用它
  • “可序列化”类中的字段应该是瞬态的或可序列化的

    您好 我在声纳 lint 中收到此错误 可序列化 类中的字段应该是瞬态的或 可序列化为 私有最终条件 notEmpty lock newCondition 私有最终条件 notFull lock newCondition 私有Compara
  • 上渲染 MathJax 输出

    我搜索过这个主题 但无法找到直接答案 而且我也不擅长 javascript 所以我希望有人能告诉我如何做到这一点 我只是喜欢在canvas2D 中显示数学 我用context fillText将字符串传递给canvas2d 但该字符串显然没
  • 以编程方式在 Windows 中创建快捷方式

    有没有办法在 Windows 中创建链接 我找到了使用的示例VBScript或者必须下载Shortcut exe 我需要一个简单的解决方案 那可能吗 我遇到了同样的问题 所以我编写了用于解析和创建 lnk 文件的库 它不使用 VBScrip
  • Python - 使用 matplotlib 组织 3 个子图

    我尝试为我的图生成 3 个子图 这似乎可行 但并不完全一致 如何使底部的图形和下面的图形之间的宽度相同 plt close fig plt figure ax1 plt subplot 211 ax1 plot cycles np asar
  • npm install 错误:rollbackFailedOptional

    当我尝试时npm install新软件包它向我显示此错误 rollbackFailed可选 动词 npm session 585aaecfe5f9a82 node version 8 4 0 npm version 5 3 0 first
  • 启用 cookie 后,为什么 jsessionid 出现在 Wicket URL 中?

    我注意到 当用户第一次访问我的网站时 Wicket 生成的 URL 包含jsessionid 而不是依赖 cookie 来获取会话信息 cookie 确实设置成功 如果用户只是重新加载页面 jsessionid不再附加到 URL 中 你可以
  • Chrome扩展:如何在注入后删除内容脚本?

    使用 Google Chrome 扩展 是否可以在将内容脚本注入页面后将其删除 没有用于重新加载内容脚本的 API 方法 据我所知 因此我想重新注入脚本并删除旧脚本 如果可能 不 你不能 删除 它 运行内容脚本可能会产生副作用 例如在窗口对
  • Nodejs-Req.body 在 Express 4.x 的帖子中未定义

    我正在使用中间件body parser对表单值进行编码以获取 req body 对象 但当我调试代码时 发现 req body 未定义 这是我的代码 var express require express var app express v
  • Linux 和 Windows 之间的移植如何进行?

    如果一款特定的软件要在一个平台上运行 而程序员 公司 任何人想要将其移植到另一个平台上 那么到底要做什么 我的意思是 他们只是将 Linux 或 Windows 特定的引用重写为另一个中的等效引用吗 或者是否需要整个重写 只是想了解是什么导
  • VSO NuGet Publisher 构建步骤失败

    我正在使用 Visual Studio Online 包管理器预览版以及新的构建系统 包管理器预览添加了许多构建步骤 包括 NuGet Publisher 步骤 该步骤应将包推送到 Visual Studio Online 托管的私有源 N
  • 无法在 swift iOS 8 扩展中投射 UIImage

    我有一个奇怪的问题 我正在尝试构建一个操作扩展 该扩展将从提供的图像中扫描条形码 这是代码 override func viewDidLoad super viewDidLoad Get the item s we re handling
  • 使用带有附加参数的自定义规则验证 Laravel 中的数组

    我正在使用 Laravel 5 7 我需要使用 2 个输入 前缀 数字 来验证电话长度 总位数必须始终为 10 我正在将这个自定义规则用于其他运行良好的项目
  • 如何在命令行上从 COM exe 中提取 TypeLib

    我最近需要生成一个互操作程序集 经过一番谷歌搜索后我发现tlbimp exe 我的下一个问题是我的 COM 库没有附带 tlb文件 进一步的谷歌搜索显示 类型库通常作为资源包含在 exe dll 中 果然 在 VS2010 中打开 exe
  • 为什么不调用 Destroy?

    鉴于以下 Delphi 代码 Foo is Free d on FormClose but TFoo Destroy没有被调用 因此Bar is not Freed 导致内存泄漏 我是否在这里错过了一些东西 或者 Foo Free 在某个时