Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интерфейсы, лишний инкремент счетчика копий 
:(
    Опции темы
dvamaster
  Дата 17.11.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: нет
Всего: 10



Delphi 2010 без апдейтов

Динамический массив структур в которых одно из полей Интерфейс

если интерфейс передавать в качестве результата функции,
то счетчик копий интерфейса увеличивается т.к. присвоили какой-то переменной
но обратно он не уменьшается

Код

type
  PMyInterfaceRec = ^TMyInterfaceRec;
  TMyInterfaceRec = record
    // ...
    Intf: IMyInterface;
    Next: PMyInterfaceRec;
  end;

var
  List: PMyInterfaceRec;

function GetIntf(AIndex: Integer): IMyInterface;
var
  // ...
  p: PMyInterfaceRec;
begin
  p := List;
  // манипуляции с поиском
  Result := p^.Intf
end;

var
  intrf: IMyInterface;

begin
  // ...
  intrf := GetIntf(0); // счетчик увеличивается на 2
  // ...
  intrf := nil; // счетчик уменьшается на 1
  // ...
end.


есть ли решение приблемы?


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
Демо
Дата 27.11.2009, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: нет
Всего: 50



Цитата(dvamaster @  17.11.2009,  13:53 Найти цитируемый пост)
есть ли решение приблемы?


Как ты определил, что счётчик не обнуляется?
Код


function GetIntf(AIndex: Integer): IMyInterface;
var
  // ...
  p: PMyInterfaceRec;
begin
  p := List;
  // манипуляции с поиском
  Result := p^.Intf
end;                                         //здесь при p выходит из области видимости, выполняется _Release



--------------------
    
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0972 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.