gpt4 book ai didi

delphi - 对象是否应该释放它所包含的对象?

转载 作者:行者123 更新时间:2023-12-03 15:38:40 25 4
gpt4 key购买 nike

最近我遇到了一个困境。

考虑这样的例子:

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.

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

对于这种场景有什么指导吗?

谢谢。

最佳答案

在您给出的示例中,我认为您的 TMyObject 从其他地方接收了一个实例。如果它不在 TMyObject 构造函数中接管它所接收的流的所有权,那么它在销毁时当然不应该释放它。

为了保持理智,请遵守以下规则:实例化对象的类/代码应该销毁它

由于构造函数不会创建数据流实例,因此析构函数不应释放它。

关于delphi - 对象是否应该释放它所包含的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7190131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com