Mar*_*unu 5 delphi types pointers
可以分配一种类型的指针并将其作为不同的类型但具有相同的大小?我的意思是这样的:
procedure TForm1.Button1Click(Sender: TObject);
var A:PInt64; // 64bit
P:Pointer;
B:PDouble; // 64bit
begin
New(A);
P:=A;
B:=P;
Dispose(B);
end;
Run Code Online (Sandbox Code Playgroud)
假设我只想要8,16,32,64位有符号和无符号类型.没关系 ?
如果指向的类型不是托管类型,那么这是安全的.在您的情况下,既不是Int64
也不Double
是托管类型,所以这是安全的.
托管类型的示例是String,接口,Variant,匿名过程/方法,包含托管类型的记录等.
在托管类型上使用New
和Dispose
时,必须初始化并最终确定对象.当你使用New
和Dispose
非托管类型时,它相当于调用GetMem
和FreeMem
.
实际上,您不需要指向的类型具有相同的大小.进行调用时,FreeMem
不传递类型的大小.指向的内存具有每个块的元数据,允许它解除分配整个块.