- Код: Выделить всё
var
mi: TMyInterface;
TreeNode: TTreeNode;
...
mi := GetMyInterface();
TreeNode.Data := Pointer(mi);
...
TMyInterface(TreeNode.Data).MyMethod();
По поводу этого кода меня терзают смутные сомнения..
1) Если я правильно понимаю, жесткое приведение типа не должно повлиять на подсчет ссылок -- в смысле счетчик ссылок не изменится, так? И я должен поддерживать другие ссылки на тот же экземпляр интерфейса (например, mi), чтобы он не освободился сам?
2) Поскольку Data -- это уже Pointer, то любые манипуляции с его значением (присваивание его чему-то, присваивание ему чего-то) никак не отразятся на подсчете ссылок?
3) Может быть тут есть какие-нибудь грабли, про которые я забыл?
4) Можно ли всё вышесказанное отнести к такому же хранению интерфейсов в простом TList, без использования TInterfaceList?
5) Может у кого-нибудь в закладках есть хорошая статья по внутреннему устройству интерфейсов? А то слово Interface -- не очень google-friendly..