【问题标题】:Pointer x Reference to a Class in DelphiDelphi中指向类的指针x引用
【发布时间】:2013-04-03 18:47:40
【问题描述】:

使用指针代替类引用有什么好处吗? 例如:

TMyClass = class(TObject);

procedure Method;
var
    pmc : ^TMyClass;
    //instead of
    mc : TMyClass;       
begin
   pmc := @ObjectMyClass;
   //instead of
   mc := ObjectMyClass;

   if pmc.Enabled then
      blablabla;
   //instead of
   if mc.Enabled then 
     blebleble;           
end;

【问题讨论】:

    标签: delphi pointers dereference


    【解决方案1】:

    Delphi 中的所有类都是通过引用传递/使用的,因此添加另一个间接级别不会添加任何内容。

    这不适用于总是按值传递/使用的记录。可以通过声明指针类型通过引用使用这些,并通过使用指针类型或 var 关键字(它为您处理指针函数参数混乱)将它们传递给函数。

    (Ctrl+F 表示“班级”) http://docwiki.embarcadero.com/RADStudio/XE3/en/Pointers_and_Pointer_Types

    如果你熟悉 C/C++,^TMyClass 相当于:

    **MyClass
    

    这在某些情况下很有用,例如当您想通过将指针传递给指向该函数的指针来使用函数编辑指针时,但我怀疑这些构造是否可以使用 Delphi。

    【讨论】:

    • 所以它只对大数组或记录有用?
    • @MatheusFreitas:它对于您想使用函数编辑的任何数据都很有用,所以是的。
    • 额外的间接层意味着你必须有两个变量才能做到。非常糟糕的主意。
    • 双间接指针通常用于在从文件流式传输对象树时解析前向引用。您基本上存储了一个变量或字段的内存地址列表,这些变量或字段需要在加载目标对象后更新以指向所需的对象。使用 Delphi 很可能实现这些构造,但绝对不是应用程序开发人员需要做的事情。它是低级管道工的工具,而不是应用程序开发人员。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多