Каков правильный шаблон использования для переменной TBytes? По моему мнению, TBytes - это не класс, а "динамический массив байтов". Я не уверен, где выделяется память для него, когда он освобождается, и который является лучшим способом передать его от производителя к потребителю. Я хочу, чтобы мой продюсер создал экземпляр TBytes, а затем передал его потребителю. После этого производитель хочет повторно использовать свою переменную-член TBytes, содержащую информацию о том, что потребитель в конечном итоге вернет память в систему. Если TBytes был объектом, у меня не было бы проблем, но я не уверен, как TBytes работает в этом сценарии.
Например, в объекте A я хочу собрать некоторые данные в массив TBytes, который является членом объекта A. Когда это будет завершено, я тогда хочу передать массив TBytes другому объекту B, который затем становится владелец данных. Тем временем, обратно в объект A, я хочу начать сбор дополнительных данных, повторно используя переменную-член TBytes.
type
TClassA = class
private
FData: TBytes;
public
procedure AssembleInput(p: Pointer; n: Cardinal);
end;
TClassB = class
public
procedure ProcessData(d: TBytes);
end;
var
a: TClassA;
b: TClassB;
procedure TClassA.AssembleInput(p: Pointer; n: Cardinal);
begin
SetLength(FData, n);
Move(p^, FData, n); // Is this correct?
...
b.ProcessData(FData);
...
// Would it be legal to reuse FData now? Perhaps by copying new (different)
// data into it?
end;
procedure TClassB.ProcessData(d: TBytes);
begin
// B used the TBytes here. How does it free them?
SetLength(d, 0); // Does this free any dynamic memory behind the scenes?
end;
Спасибо заранее!