Delphi 它';是否可以分配一种类型的指针,并将其作为不同类型但大小相同的指针进行处理?

Delphi 它';是否可以分配一种类型的指针,并将其作为不同类型但大小相同的指针进行处理?,delphi,pointers,types,Delphi,Pointers,Types,可以分配一种类型的指针,并将其作为不同类型但大小相同的指针进行处理吗?我的意思是: procedure TForm1.Button1Click(Sender: TObject); var A:PInt64; // 64bit P:Pointer; B:PDouble; // 64bit begin New(A); P:=A; B:=P; Dispose(B); end; 假设我只想要8、16、32、64位有符号和无符号类型。可以吗?如果指向的类型不是托管类

可以分配一种类型的指针,并将其作为不同类型但大小相同的指针进行处理吗?我的意思是:

procedure TForm1.Button1Click(Sender: TObject);
var A:PInt64;   // 64bit
    P:Pointer;
    B:PDouble;  // 64bit
begin
  New(A);
  P:=A;
  B:=P;
  Dispose(B);
end;

假设我只想要8、16、32、64位有符号和无符号类型。可以吗?

如果指向的类型不是托管类型,则这是安全的。在您的情况下,
Int64
Double
都不是托管类型,因此这是安全的

托管类型的示例包括字符串、接口、变量、匿名过程/方法、包含托管类型的记录等

在托管类型上使用
New
Dispose
时,必须初始化并最终确定对象。在非托管类型上使用
New
Dispose
时,这相当于调用
GetMem
FreeMem


事实上,您不需要指向相同大小的类型。调用
FreeMem
时,不会传递类型的大小。所指向的内存具有每个块的元数据,允许它取消分配整个块

如何编写不可维护代码的对象课程!不管它是否可维护,我只想知道它是否正常工作,是否分配和处置了相同的内存位置。。。我真的需要这么做。@MarusNebunu——是的,没有内存泄漏。顺便说一句,您是否使用ReportMemoryLeaksOnShutdown:=True?我想看看这个的真正用途。它指向一些可疑的东西。这是一个有趣的问题,因为内存管理器知道它必须释放的大小,而且这些不是托管类型,所以不需要额外的终结。它不适用于托管类型(即需要运行时代码进行额外初始化或终结的类型)。所以一般来说,我只建议使用正确的指针,而不是其他类型的指针。执行类似操作的代码有一种极端的代码味道。是的,我指的是未管理的类型。我不知道他们这么叫。AnsiChar和WideChar被管理?@“你的最后一句话”-因此,如果我设置
ReportMemoryLeaksOnShutdown:=True
并分配一个PDouble并将其作为PByte处理,可能这就是我不接收内存泄漏报告的方式…+1整个问题的某些方面感觉有点像跳基。。。当人们发现自己真的可以打扮成松鼠从悬崖上跳下来,安全地降落在预定的目的地时,会有一种启发性的兴奋感,亲眼目睹这件事发生的令人震惊的鲁莽行为迫使人们深刻反省选择这种特殊的方法来完成这项工作的智慧。虽然它可能会奏效,但我绝对不会建议将一品脱64作为一个双份来处理。我通常会说,一个人应该只处理正确的类型。依我看,处理错误的类型是一种可怕的代码气味。