Продолжаем копить глюки SyStemStrngClass

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2583
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Продолжаем копить глюки SyStemStrngClass

Сообщение Губин Игорь »

Дед Пахом писал(а): Тут конструктор вызывается перед объявлением
Согласен это мысль!
Хотя "моём" случае нет переопределения функций. Если только велосипедисты не наступили на такие грабли сами где-то в описаниях класса. Это мысль. Но тогда надо разбираться со всем классом, а это ну его нафиг.
Это я только кажусь дураком! На самом деле я полный идиот!
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Продолжаем копить глюки SyStemStrngClass

Сообщение Yufil »

Насколько я понимаю, при использовании New деструктор вообще не вызывается. Потому и не кусают...
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2583
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Продолжаем копить глюки SyStemStrngClass

Сообщение Губин Игорь »

Yufil писал(а): деструктор вообще не вызывается
?????? Dispose ??????????? :idied:
The Destruct method is an automatic destructor that is called when the object is removed from memory. This ensures that all data allocated by the object is removed from memory.
Это я только кажусь дураком! На самом деле я полный идиот!
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Продолжаем копить глюки SyStemStrngClass

Сообщение Yufil »

Если объект создан через New, Dispose не вызывается. А вот если создан как локальный объект класса процедуры, тогда да...

Код: Выделить всё

S   &MyObject 
S1   MyObject 

Code 
!  Сейчас сработал конструктор S1 
S  &= New(MyObject)  ! Присвоили ссылку 
....
Return 
!  Сработал деструктор для S1 
! А деструктор для S не сработает... 
Может быть, имеет смысл создать конструкторы - деструкторы с глобальной очередью - пулом свободных объектов
Деструктор не уничтожает объект, а возвращает его в пул
Конструктор выбирает свободный объект из пула, если таковой есть. Или создаёт, если нет...
Но это так, пожелания...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3288
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Продолжаем копить глюки SyStemStrngClass

Сообщение Дед Пахом »

Yufil писал(а): Если объект создан через New, Dispose не вызывается
DISPOSE или деструктор? DISPOSE надо вызвать самому, это автоматически вызовет деструктор.

Код: Выделить всё

  DISPOSE(s)  !- неявный вызов деструктора
С уважением, ДП
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2583
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Продолжаем копить глюки SyStemStrngClass

Сообщение Губин Игорь »

Yufil писал(а):
Может быть, имеет смысл создать конструкторы - деструкторы с глобальной очередью - пулом свободных объектов
Деструктор не уничтожает объект, а возвращает его в пул
Можно, но это нарушает "бритву Оккама". Да и излишние расходы на поиск свободного объекта в пуле, если работа не организована по принципу стека.
У меня есть что-то подобное, но там меньше десятка однотипных объектов, да и занимаются/освобождаются они при входе/выходе процедуры. Сделано для экономии ресурсов при первичной инициализации, которая выполняется при запуске потока (довольно муторный набор операций).
Это я только кажусь дураком! На самом деле я полный идиот!
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Продолжаем копить глюки SyStemStrngClass

Сообщение Yufil »

Пул - просто глобальная очередь ссылок, это не проблема.

У меня программа падала на вызове деструктора класса, один из вариантов исправления был - совсем убрать деструкторы,
завести очередь свободных объектов, как описано выше. К счастью, проблема после долгих плясок с бубном рассосалась...
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2583
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Продолжаем копить глюки SyStemStrngClass

Сообщение Губин Игорь »

Yufil писал(а): Пул - просто глобальная очередь ссылок, это не проблема.
Я понял. И ответ как раз на тему, что, ро мне, не всегда это оправданно. Только если ссылок много.
Yufil писал(а): У меня программа падала на вызове деструктора класса
У меня аналогичная ситуация. Как выяснилось, SystemStringClass не любит ни конструкторов, ни деструкторов, если они автоматически вызываются в момент объявления переменной или закрытия программы, за исключением случаев, когда это выполняется при инициализации/закрытии потока.
Это я только кажусь дураком! На самом деле я полный идиот!
Ответить