有没有办法在Delphi中实例化所需数量的对象,而无需迭代?

pro*_*tor 4 delphi delphi-2007

我认为C++支持以下内容:

Object objects[100];
Run Code Online (Sandbox Code Playgroud)

这会实例化100个对象,对吧?是否有可能在Delphi(特别是2007年)中做到这一点?除了以下之外的东西:

for i:=0 to 99 do
  currentObject = TObject.Create;
Run Code Online (Sandbox Code Playgroud)

或者使用Allocate函数,传递的大小值是大小的一百倍TObject,因为它只是分配内存,它实际上并没有划分内存并将它"赋予"对象.如果我假设c ++实例化是即时的而不是根据引擎迭代,我道歉.

klu*_*udg 5

你在寻找什么是不可能的,因为

  • Delphi不支持静态(堆栈分配)对象.
  • Delphi对象没有可由编译器自动调用的默认构造函数.

所以这不是缺乏'糖语法'.


为了完整披露:

  • Delphi还支持传统的"旧对象模型"(Turbo Pascal对象模型),它允许静态分配对象;
  • 动态对象分配本身并不会阻止自动对象实例化语法,但会使这种语法不合需要;
  • 自动对象实例化语法是不可能的,因为Delphi没有默认构造函数:Delphi编译器从不隐式实例化对象,因为它不知道要调用的构造函数.


Lar*_*tig 5

虽然您无法使用对象执行所需操作,但如果对象相对简单,则可以使用记录数组获得所需内容.

Delphi中的记录可以包含属性(包括setter和getter),以及类和实例方法.它们在声明时自动创建,因此声明它们的数组将创建它们而不进行迭代.

欲了解更多信息:http://docwiki.embarcadero.com/RADStudio/XE3/en/Structured_Types#Records_.28advanced.29.

(我不确定何时将新功能添加到Delphi,它可能是在2007版本之后).