Мне интересно, не опасно ли использование универсального TList<T>
, где T
- какого-либо типа интерфейса (кроме IUnknown
/ IInterface
) Я интенсивно использую интерфейсы и храню их в списках. Некоторые интерфейсы являются моими собственными, некоторые предоставляются некоторыми COM-интерфейсами, поэтому COM участвует.
Я вижу потенциальную проблему, когда происходит проверка на равенство экземпляров, например, когда я использую Remove
метод списка (который внутренне должен сравнить мое предоставленное значение с содержащимися значениями). Согласно COM-правилам вы можете сравнивать только два интерфейса на равенство после приведения их к IUnknown
. Я не знаю, знает ли об этом компаратор по умолчанию, связанный с поиском моего интерфейса в TList<T>
.
Чтобы проиллюстрировать мой вопрос на примере:
var
list:TList<IMyInterface>;
intf:IMyInterface;
begin
...
list:=TList<IMyInterface>.Create;
list.Add(intf);
...
list.Remove(intf);
end;
Законен ли приведенный выше код?