Если у меня есть следующее объявление типа интерфейса с подсчетом ссылок.
type
ISomeInterface = interface
['{xxxx-xxxx-xxx-xxxx-xxx}']
procedure doThing();
end;
TSomeInterfaceImpl = class(TInterfacedObject, ISomeInterface)
public
procedure doThing();
end;
...
var arrayOfSomeInterface : array of ISomeInterface;
Будет ли следующий код причиной утечки памяти?
SetLength(arrayOfSomeInterface, 1);
arrayOfSomeInterface[0] := TSomeInterfaceImpl.create();
SetLength(arrayOfSomeInterface, 2);
arrayOfSomeInterface[1] := TSomeInterfaceImpl.create();
Из того, что я знаю, когда SetLength ()вызывается для динамического массива, он выделяет новую память для нового динамического массива, а затем копирует содержимое старого массива в новый массив.
Что произошло с подсчетом ссылок интерфейса в старом массиве.Будет ли оно правильно уменьшено?