Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CLOS финализация или деструктор 
:(
    Опции темы
kosmonaFFFt
Дата 23.2.2010, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброго времени суток,
можно ли как-нибудь в CLOS сделать метод для финализации объекта (по аналогии с деструктором в плюсах)?
У меня есть класс, в котором происходит выделение некоторых ресурсов из внешней библиотеки (делал через cffi)
и их надо вручную освобождать...
Порылся в "Practical Common Lisp", но там ничего про это не нашел...
Заранее спасибо...


--------------------
user posted image
PM MAIL ICQ   Вверх
k0rvin
Дата 23.2.2010, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



насколько я знаю -- никак, хотя наверное некоторые реализации позволяют.

http://www.lispworks.com/documentation/Hyp...dy/c_object.htm

вообще, если Вы уверены, что на инстанс ссылается только один символ, то можно просто пересвязать символ с nil, тогда поскольку на объект больше ничто не ссылается, память будет высвобождена сборщиком мусора. если вы имеете в виду выполнение каких-то действий перед удалением объекта, то можно попробовать что-то в этом роде:

Код

(defclass foo ()
  ((data :accessor foo-data
         :initarg  :data
         :initform nil)))

(defgeneric finalize-object (instance)                                 
  (:documentation "Finalizing method"))

(defmethod finalize-object ((inst foo))                                
  (setf (foo-data inst) nil))

(defmacro finalize-objects (&rest objs)                                       
  `(progn ,@(loop for obj in objs
                  append `((finalize-object ,obj) (setf ,obj nil)))))

(let ((foo1 (make-instance 'foo)))
  (print foo1)
  (finalize-objects foo1)
  (print foo1)


вот может еще полезно будет: http://www.sbcl.org/manual/Garbage-Collection.html


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
kosmonaFFFt
Дата 23.2.2010, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообще в идеале хотелось бы выполнение действий перед тем, как сборщик удалит объект...
/me пошел читать ссылки...


--------------------
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

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

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


 




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


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

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