它应该包含它包含的自由对象吗?

Wod*_*dzu 3 delphi class

最近我有一个dillema.

考虑这样的例子:

unit Unit2;

interface

uses
  Classes;

type
  TMyObject = class(TObject)
  private
    FDataStream: TMemoryStream;
    procedure SetDataStream(const Value: TMemoryStream);
  public
    property DataStream: TMemoryStream read FDataStream write SetDataStream;
    constructor Create(ADataStream: TMemoryStream);
    destructor Destroy;
  end;

implementation

{ TMyObject }

constructor TMyObject.Create(ADataStream: TMemoryStream);
begin
  FDataStream := ADataStream;
end;

destructor TMyObject.Destroy;
begin
  //Should MyObject free FDataStream?
end;

procedure TMyObject.SetDataStream(const Value: TMemoryStream);
begin
  FDataStream := Value;
end;

end.
Run Code Online (Sandbox Code Playgroud)

如您所见,TMyObject可以有一个TMemoryStream实例.现在,我想知道TMyobject在被释放时应该做什么?它是否还应该释放FDataStram还是它应该保留原样?

这样的场景是否有任何指导?

谢谢.

Mar*_*ema 10

在示例中,您似乎在我看来,您的TMyObject从其他地方接收实例.如果它不在TMyObject构造函数中来接管它收到的流的所有权,那么当它被销毁时肯定不会释放它.

为了保持你的理智,坚持这个规则:实例化一个对象的类/代码应该销毁它.

并且由于您的构造函数不创建数据流实例,因此析构函数不应释放它.