我正在使用 TMemoryStream
我需要将它传递给 var
TStream
程序(外部库)。我刚刚投了我的 TMemoryStream
至 TStream
像这样:
var
myStream: TMemoryStream;
begin
//...
ExternalProcedure(TStream(myStream)); //procedure ExternalProcedure(var AStream: TStream);
end;
这是要避免的吗?是否需要大量额外内存(有问题的流可能是几 MB)?我的猜测是否定的,但在 Delphi 中不是 100% 确定。
最佳答案
MBo is right : 这种类型转换只会指示编译器假定类型是您指定的类型。这本质上是一个不会生成额外代码的强制转换。 (但是在转换值类型时有很多异常(exception)。)
但是,我通常会避免这种不安全的转换。以下是可能出错的示例:
type
TAnimal = class
DNASequence: string;
end;
TSpider = class(TAnimal)
MoultCount: Integer;
end;
procedure ChangeAnimal(var AAnimal: TAnimal);
begin
FreeAndNil(AAnimal);
AAnimal := TAnimal.Create;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Spider: TSpider;
begin
Spider := TSpider.Create;
try
Spider.DNASequence := 'CTGA...';
Spider.MoultCount := 3;
ChangeAnimal(TAnimal(Spider));
ShowMessage(Spider.MoultCount.ToString); // Oops! The `TSpider` variable
// points to a `TAnimal` object!
finally
Spider.Free;
end;
end;
关于delphi - 在 Delphi 中,将一个对象转换为它的父对象会占用更多的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62526880/