分配自我的后果

Veg*_*gar 3 delphi self variable-assignment

今天发现了一段代码,我发现有点臭......

TMyObject.LoadFromFile(const filename: String);
begin
  if fileExists(filename) then
    self := TSomeObjectStreamer.ReadObjectFromFile(filename);
end;
Run Code Online (Sandbox Code Playgroud)

如果此代码有效,它至少会泄漏一些内存,但是它有效吗?
可以这种方式分配给自己吗?

如果流对象与原始self不同,那该怎么办?
如果流对象是一个与原始self没有共同祖先的不同类,该怎么办?