【问题标题】:Do I need to free these objects?我需要释放这些对象吗?
【发布时间】:2010-07-07 12:24:51
【问题描述】:

我正在使用 Delphi 1 16 位来学习 Pascal(别笑,它工作得很好,而且我买不起更新的版本)。我正在使用 TList 来保存简单地址簿的对象引用。每个对象都添加到 TList 中,如下所示:

DataList.Add(TAddrBookData.Create('Bob', '1 Mill St'));

我需要自己释放 TAddrBookData 对象吗?还是在运行 TList.Free 时释放它们?

【问题讨论】:

  • 欢迎来到 StackOverflow,Frank_M!好问题。我不会笑,但我会警告你。 64 位 Windows 每天都在变得越来越流行,而 16 位应用程序将无法在其上运行。如果你买不起现代版本,看看你是否至少不能在某个地方找到一个使用过的 Delphi 7 副本。与 Delphi 1 相比,它有很多改进。
  • Delphi 1 不是学习 OOP 的好起点。如果您想学习基础知识,那很好,但是就现代技术而言,它确实已经过时了。如果你想学习现代 OOP 和编程技术,我推荐 C#,有免费的 IDE:microsoft.com/express/Downloads/#2010-Visual-CS。 C# 是由前 delphi 架构师设计的,所以它充分利用了它。
  • 如果您决定学习 Delphi,您可能想要查找已从 Borland / CodeGear / Embarcadero 网站删除的 Delphi 7 Personal,但在某些镜像主机上仍然可用。我认为使用它是合法的,因为它曾经作为免费软件发布。
  • @Andrey:他说的是他想学习 [Object] Pascal,而不是 C#,也不是“OOP”。 Delphi 1 确实缺少很多现代特性,但这会让他在基础方面打下良好的基础,并且学习在不依赖新特性的情况下完成任务将使他成为一个更好的程序员。 (而且它也有一个很好的对象模型。它没有 C# 或现代 Delphi 版本那么精致。)但我个人认为他错过的最重要的语言增强不是对象模型的东西,而是长字符串,它没有t 存在于 D1 IIRC 中。
  • Delphi 1 与 Delphi 2010 或 VS 2010 一样具有 OOP。为此,它也可以使用 Turbo Pascal 6 或 7 来学习 OOP。 Java 或 C# 中几乎没有什么新东西不存在,尤其是对于学习基础知识的初学者而言。也许一个不太丰富的框架可以帮助专注于学习,而不是使用预先构建的类。

标签: delphi


【解决方案1】:

您需要自己释放它们。以后的版本带有一个 TObjectList,它与 TList 类似,只是它只接受对象,并且它可以选择获取所有权并在释放列表时自动为您释放它们。但我不相信 Delphi 1 中存在 TObjectList,因此您必须手动处理它。

【讨论】:

  • ...这是一个绝佳的学习机会...采用 TList 然后设计扩展(派生类)以提供具有内容所有权的 TObject 类型安全容器语义。通过开发这样的课程,你将学到比仅仅使用已经提供的课程更多的东西。
【解决方案2】:

您还需要释放(或 FreeAndNil)这些。

如果您想使用更新的(免费)IDE 学习 Object Pascal (Delphi),请尝试 Lazarus,因为免费的 Turbo Delphi 2006 已停止使用(这是一个糟糕的举动)。

【讨论】:

  • 非常非常糟糕的举动,确实:(
  • FreeAndNil() 在 Delphi 1 中不存在(我知道,我仍然必须使用它来维护 16 位代码)。但是你可以自己写。
  • 确实不太难实现 :) Delphi 1 似乎很遥远……我家里有一个密封的 Delphi 1 盒子,我把它当作收藏家,呵呵。
  • +1 为 Lazarus 小费。不得不说,不花钱买官方IDE就没有办法学习Delphi,真是太可悲了。有少数人不遗余力地学习 Delphi(比如海报上放着一个旧的 16 位副本,或者可能是花一点钱买的),但大多数人只是离开了它。谁会花几百欧元去玩最基本的版本?我会使用 Visual Studio C# Express 或 Eclipse/Netbeans for Java,而将 Delphi 保留原样。
  • 哦,好吧,为什么不用 C# 和 Java,为什么不用 C++?
猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 2011-03-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
相关资源
最近更新 更多