продлить жизнь объекту?
От: Аноним  
Дата: 20.08.13 07:25
Оценка: :))) :))) :))) :))) :)))
Привет!

Есть ли возможность продлить жизнь объекту когда лля него выполнили delete?
Суть такая есть обьект который после удаления должен некоторое время еще пожить например визуальный обьект после удаления не сразу исчезает с экрана, а постепенно угасает и только потом реально удаляется.
Конечно можна было бы создать копию этого объекта но это приведет к потере плавности и будет заметен рывок чего хотелось бы избежать.
Какие есть идеи на этот счет?
Re: продлить жизнь объекту?
От: The Passenger Голландия  
Дата: 20.08.13 07:46
Оценка: +4
Здравствуйте, Аноним, Вы писали:

вам надо срочно очень много прочитать ...
для начала понять что такое GUI
Весь мир — Кремль, а люди в нем — агенты
Re: продлить жизнь объекту?
От: saf_e  
Дата: 20.08.13 08:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет!


А>Есть ли возможность продлить жизнь объекту когда лля него выполнили delete?

А>Суть такая есть обьект который после удаления должен некоторое время еще пожить например визуальный обьект после удаления не сразу исчезает с экрана, а постепенно угасает и только потом реально удаляется.
А>Конечно можна было бы создать копию этого объекта но это приведет к потере плавности и будет заметен рывок чего хотелось бы избежать.
А>Какие есть идеи на этот счет?

Дам подсказку: удалять объект не сразу, а когда его уже никто не будет видеть (не только на экране, но и в памяти).
Re: продлить жизнь объекту?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 20.08.13 08:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет!


А>Есть ли возможность продлить жизнь объекту когда лля него выполнили delete?

А>Суть такая есть обьект который после удаления должен некоторое время еще пожить например визуальный обьект после удаления не сразу исчезает с экрана, а постепенно угасает и только потом реально удаляется.
Очевидное решение — удалять объект именно тогда, когда он "только потом реально удаляется".

А>Конечно можна было бы создать копию этого объекта но это приведет к потере плавности и будет заметен рывок чего хотелось бы избежать.

А за счет чего потеря плавности и рывки? Сколько десятков (милли?)секунд создается копия объекта?
А>Какие есть идеи на этот счет?
для начала разобраться, зачем выполнять delete для объекта, который должен еще пожить.
Re: продлить жизнь объекту?
От: jazzer Россия Skype: enerjazzer
Дата: 20.08.13 09:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет!


А>Есть ли возможность продлить жизнь объекту когда лля него выполнили delete?

А>Суть такая есть обьект который после удаления должен некоторое время еще пожить например визуальный обьект после удаления не сразу исчезает с экрана, а постепенно угасает и только потом реально удаляется.
А>Конечно можна было бы создать копию этого объекта но это приведет к потере плавности и будет заметен рывок чего хотелось бы избежать.
А>Какие есть идеи на этот счет?

Для этого не нужен сам объект. Делается его снимок, объект удаляется, вместо него вешается картинка, которая уже мирно угасает.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: продлить жизнь объекту?
От: Кодт Россия  
Дата: 20.08.13 09:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть ли возможность продлить жизнь объекту когда лля него выполнили delete?


Можно удалять прокси, который из деструктора запустит какой-то асинхронный смертоносный процесс объекту.

А>Суть такая есть обьект который после удаления должен некоторое время еще пожить например визуальный обьект после удаления не сразу исчезает с экрана, а постепенно угасает и только потом реально удаляется.


Послать виджету сигнал "умри медленно и печально", вместо того чтобы удалять.
И обнулить указатель на него, вычеркнуть из коллекции виджетов.

Виджет запустит таймер, по которому будет меняться... меняться... и в конце концов самоуничтожаться.

Все конкретные детали реализации зависят от фреймворка.
Я хорошо представляю, как это делать в голом WinAPI/ATL/WTL/MFC, примерно представляю — как в Qt, и могу экстраполировать опыт на всякие там VCL, GTK, etc.
Перекуём баги на фичи!
Re[2]: продлить жизнь объекту?
От: The Passenger Голландия  
Дата: 20.08.13 09:39
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Все конкретные детали реализации зависят от фреймворка.

К>Я хорошо представляю, как это делать в голом WinAPI/ATL/WTL/MFC, примерно представляю — как в Qt, и могу экстраполировать опыт на всякие там VCL, GTK, etc.

wpf таки рулит ... хотя это и форум о с++
Весь мир — Кремль, а люди в нем — агенты
Re: продлить жизнь объекту?
От: Erop Россия  
Дата: 20.08.13 11:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Какие есть идеи на этот счет?

Лучше не копию, а прокси. То есть, ты всегда с объектом общаешься через прокси, который редеректит весь нужный интерфейс в отдельный объект -- реализацию. А когда проксю убивают, он передаёт свою реализацию в некий менеджер загробного мира, который уже и реализует посмертную жизнь объекта...

Только у теюя будет много всяких архитектурных проблем. Ну, например, если в гаснущий объект кликнут, или там отображаемый им файл поменют, то что должно произойти? А если файл удалят?

То есть вопрос упрётся в то, насколько активной может быть загробная жизнь объёкта. Если активной, и, тем более, возможно воскрешение объекта, то подход с проксей как раз хорошо будет работать. Типа пока жива "душа", ей всегда можно родить новую прокси-"тело" и вернуть объект в множество полноценных.

А если посмертная жизнь очень ограниченна, типа это просто какие-то статические данные, как-то отображаемые, то можно просто делать слепок с объекта, например с GUI-объекта можно деать просто фотку, и уже этот слепок отдавать в "загробный мир"
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: продлить жизнь объекту?
От: lgb Канада  
Дата: 20.08.13 13:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть ли возможность продлить жизнь объекту когда лля него выполнили delete?

А>Суть такая есть обьект который после удаления должен некоторое время еще пожить например визуальный обьект после удаления не сразу исчезает с экрана, а постепенно угасает и только потом реально удаляется.
А>Конечно можна было бы создать копию этого объекта но это приведет к потере плавности и будет заметен рывок чего хотелось бы избежать.

А new вы замедлить не хотите, чтобы объект плавно появлялся?

Объект прекращает свое существование после вызова delete.
Если объект визуальный, то пусть сам себя и отрисовавает исчезающим. Когда он решит, что его видимость нулевая, пусть шлет сообщение своему владельцу, чтобы тот его удалил.
Re[2]: продлить жизнь объекту?
От: Erop Россия  
Дата: 20.08.13 13:57
Оценка:
Здравствуйте, lgb, Вы писали:

lgb>Если объект визуальный, то пусть сам себя и отрисовавает исчезающим. Когда он решит, что его видимость нулевая, пусть шлет сообщение своему владельцу, чтобы тот его удалил.


Зачем так сложно? можно просто отдавать такие "гаснущие2 объекты специальному владельцу, который их постепенно пригасит, а потом и разрушит...


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

но тут мона замутить проксю -- самый простой путь -- shared_ptr + функция деаллокации, которая не delete зовёт, а сдаёт объект плавному разрушителю объектов...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: продлить жизнь объекту?
От: lgb Канада  
Дата: 20.08.13 15:35
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, lgb, Вы писали:


lgb>>Если объект визуальный, то пусть сам себя и отрисовавает исчезающим. Когда он решит, что его видимость нулевая, пусть шлет сообщение своему владельцу, чтобы тот его удалил.


E>Зачем так сложно? можно просто отдавать такие "гаснущие2 объекты специальному владельцу, который их постепенно пригасит, а потом и разрушит...



E>Другое дело, что сами эти объекты могут быть замешаны в какую-то отдельную сожную структуру, ими владеющую, и тогда у тебя может не быть власти заменить убой объекта передачей его к этому "гасителю".


E>но тут мона замутить проксю -- самый простой путь -- shared_ptr + функция деаллокации, которая не delete зовёт, а сдаёт объект плавному разрушителю объектов...


На вкус и цвет все фломастеры разные.
Откуда плавный разрушитель знает, как правильно плавно разрушить отдельно взятый объект? Один может погаснуть, другой взорваться, третий упрыгать за границы экрана и т.п. По-моему, это дело самого объекта закончить свои делишки и известить об этом заинтересованные лица

Кстати, иметь операторы visual new и visual delete было бы клево
Re[4]: продлить жизнь объекту?
От: Erop Россия  
Дата: 20.08.13 15:50
Оценка:
Здравствуйте, lgb, Вы писали:

lgb>Откуда плавный разрушитель знает, как правильно плавно разрушить отдельно взятый объект? Один может погаснуть, другой взорваться, третий упрыгать за границы экрана и т.п. По-моему, это дело самого объекта закончить свои делишки и известить об этом заинтересованные лица


почему обязательно объекта, а не его владельца, например, или причины, почему его начали разрушать, скажем?

lgb>Кстати, иметь операторы visual new и visual delete было бы клево

Лучше бы не надо...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: продлить жизнь объекту?
От: Кодт Россия  
Дата: 20.08.13 16:26
Оценка:
Здравствуйте, lgb, Вы писали:

lgb>Кстати, иметь операторы visual new и visual delete было бы клево


Голос смолтолка шепчет у кого-то в голове.
Сперва задумайся о временнОм аспекте этих действий. Плавное создание-удаление происходит не атомарно, и что при этом должно твориться в программе?
Если действие синхронное, то программа должна тупить до завершения эффекта.
Если асинхронное, то какой статус у полуживого объекта? Он доступен, заблокирован, есть в коллекции, его нет в коллекции?
Особенно — у зарождающегося объекта. Как программа узнает, что он перешёл в стабильное состояние?

После того, как ответы будут ясно сформированы, — всё остальное делается за полчаса на коленке средствами фреймворка.
Всего-то нужно — таймер, и, для особо смелых, треды.
Перекуём баги на фичи!
Re[5]: продлить жизнь объекту?
От: lgb Канада  
Дата: 20.08.13 16:28
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, lgb, Вы писали:


lgb>>Откуда плавный разрушитель знает, как правильно плавно разрушить отдельно взятый объект? Один может погаснуть, другой взорваться, третий упрыгать за границы экрана и т.п. По-моему, это дело самого объекта закончить свои делишки и известить об этом заинтересованные лица


E>почему обязательно объекта, а не его владельца, например, или причины, почему его начали разрушать, скажем?


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

На мой взгляд, логичнее иметь функционал объекта в самом объекте, а не аутсорсить его куда попало
Re[5]: продлить жизнь объекту?
От: lgb Канада  
Дата: 20.08.13 16:31
Оценка:
Здравствуйте, Кодт, Вы писали:

lgb>>Кстати, иметь операторы visual new и visual delete было бы клево


К>После того, как ответы будут ясно сформированы, — всё остальное делается за полчаса на коленке средствами фреймворка.

К>Всего-то нужно — таймер, и, для особо смелых, треды.

Не надо! Это шутки у меня такие
Re[6]: продлить жизнь объекту?
От: Erop Россия  
Дата: 20.08.13 17:56
Оценка:
Здравствуйте, lgb, Вы писали:

lgb>На мой взгляд, логичнее иметь функционал объекта в самом объекте, а не аутсорсить его куда попало


Ну по-разному может быть. Может быть какое-то количество стандартных процедур, реализуемых через какой-то унифицированный интерфейс, ну там, типа "нарисуйся по маске прозрачности/яркости" или ещё как-то, скажем через определённый DC, а разрушалки там могут расстреливать, рвать на кусочки, жечь...

И потом менеджер разрушения можно целиком прибить, или ускорить, если что. А так прийдётся по объектам вылавливать что там кто делает...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: продлить жизнь объекту?
От: zaufi Земля  
Дата: 21.08.13 05:26
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Аноним, Вы писали:


А>>Какие есть идеи на этот счет?

E>Лучше не копию, а прокси. То есть, ты всегда с объектом общаешься через прокси, который редеректит весь нужный интерфейс в отдельный объект -- реализацию. А когда проксю убивают, он передаёт свою реализацию в некий менеджер загробного мира, который уже и реализует посмертную жизнь объекта...

E>Только у теюя будет много всяких архитектурных проблем. Ну, например, если в гаснущий объект кликнут, или там отображаемый им файл поменют, то что должно произойти? А если файл удалят?


E>То есть вопрос упрётся в то, насколько активной может быть загробная жизнь объёкта. Если активной, и, тем более, возможно воскрешение объекта, то подход с проксей как раз хорошо будет работать. Типа пока жива "душа", ей всегда можно родить новую прокси-"тело" и вернуть объект в множество полноценных.


E>А если посмертная жизнь очень ограниченна, типа это просто какие-то статические данные, как-то отображаемые, то можно просто делать слепок с объекта, например с GUI-объекта можно деать просто фотку, и уже этот слепок отдавать в "загробный мир"


читается все это как руководство некроманта какое-то %) сходу так и не скажешь что С++
Re[3]: продлить жизнь объекту?
От: c-smile Канада http://terrainformatica.com
Дата: 21.08.13 05:30
Оценка: 1 (1)
Здравствуйте, The Passenger, Вы писали:

TP>wpf таки рулит ... хотя это и форум о с++


Рулит он тем что там в принципе нет delete?
Re[5]: продлить жизнь объекту?
От: zaufi Земля  
Дата: 21.08.13 05:34
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, lgb, Вы писали:


lgb>>Кстати, иметь операторы visual new и visual delete было бы клево


К>Голос смолтолка шепчет у кого-то в голове.

К>Сперва задумайся о временнОм аспекте этих действий. Плавное создание-удаление происходит не атомарно, и что при этом должно твориться в программе?
К>Если действие синхронное, то программа должна тупить до завершения эффекта.

в этот момент в голове нарисовался следующий сниппет:
auto child = new Baby();


и следующие ~9 месяцев baby плавно так "рождается" %)

К>Если асинхронное, то какой статус у полуживого объекта? Он доступен, заблокирован, есть в коллекции, его нет в коллекции?


он находится в недрах host'a (хозяина) пока после инкубационного периода не разрывает хосту пузо (грудную клетку в некоторых вариантах %) и с криком вырывается наружу поедая еще живые (разбегающиеся) объекты

сюжет для киносценария просто
Re: продлить жизнь объекту?
От: uncommon Ниоткуда  
Дата: 21.08.13 06:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет!


А>Есть ли возможность продлить жизнь объекту когда лля него выполнили delete?

А>Суть такая есть обьект который после удаления должен некоторое время еще пожить например визуальный обьект после удаления не сразу исчезает с экрана, а постепенно угасает и только потом реально удаляется.
А>Конечно можна было бы создать копию этого объекта но это приведет к потере плавности и будет заметен рывок чего хотелось бы избежать.
А>Какие есть идеи на этот счет?

Товарищ Аноним, UI надо писать не на C++, а на C#! Там объект если и удалён, то GC его не сразу соберет, и объект еще немножко поживет, постепенно угасая. Никаких рывков! Инфа 146%!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.