Название: Виртуальные функции в Qt Отправлено: mwChief от Сентябрь 18, 2011, 23:50 Наткнулся на статью http://developer.qt.nokia.com/wiki/API_Design_Principles_Russia (http://developer.qt.nokia.com/wiki/API_Design_Principles_Russia) об api в Qt, которая оказалась для меня очень познавательной. Но часть про виртуальные функции понял не доконца, в частности этот момент:
Цитировать Люди, внутри перегруженных функций, делают страшные вещи, например: посылают события посылают сигналы повторно входят в цикл обработки событий (например, открывают диалог выбора файла) удаляют объекты (что иногда приводит к “удалению this”) С последним пунктом все вроде бы ясно, а вот предыдущие три не совсем. Может кто-то пояснит или отправить туда где об этом доходчиво написано? (можно на английском) Название: Re: Виртуальные функции в Qt Отправлено: Авварон от Сентябрь 19, 2011, 00:37 Вы кидаете сигнал из виртуалки, в слоте ваш объект удаляют, далее пункт последний.
Название: Re: Виртуальные функции в Qt Отправлено: mwChief от Сентябрь 19, 2011, 00:54 А разве так может получится только с виртуальными функциями?
Название: Re: Виртуальные функции в Qt Отправлено: Igors от Сентябрь 19, 2011, 08:09 А разве так может получится только с виртуальными функциями? Нет, и с невиртуальными тоже. Если удаление немедленное то надо аккуратно проверить что до выхода из ф-ции никаких обращение к (невалидному) this уже не будетНазвание: Re: Виртуальные функции в Qt Отправлено: LisandreL от Сентябрь 19, 2011, 09:26 Если удаление немедленное то надо аккуратно проверить что до выхода из ф-ции никаких обращение к (невалидному) this уже не будет А из виртуальной оно будет в любом случае? Или в чём разница?Название: Re: Виртуальные функции в Qt Отправлено: Авварон от Сентябрь 19, 2011, 10:34 Разница в том что невиртуалку зовете вы сами и скорее всего в курсе что сигнал может кидаться не в конце ф-ии (как например у абстракт айтемвью даблклик кидается криво и лучше не трогать селекшн в его обработке).
В случае виртуалки ее зовет фреймворк, к-ый о наследниках не знает вообще ничего. И может быть сильно удивлен если после вызова безобидной ф-ии объекта вдруг резко не станет. Название: Re: Виртуальные функции в Qt Отправлено: Igors от Сентябрь 19, 2011, 10:37 А из виртуальной оно будет в любом случае? Или в чём разница? Ну если в коде есть - то будет, иначе нет. Разницы никакойВ случае виртуалки ее зовет фреймворк, к-ый о наследниках не знает вообще ничего. И может быть сильно удивлен если после вызова безобидной ф-ии объекта вдруг резко не станет. Понятно что за последствия удаления придется ответитьНазвание: Re: Виртуальные функции в Qt Отправлено: Akon от Сентябрь 19, 2011, 21:58 Какой-то перевод кривой. Перегруженная функция - это другое. Имхо, имеется ввиду следующее:
Код: void Foo::foo() То же сказал Авварон. Название: Re: Виртуальные функции в Qt Отправлено: mwChief от Сентябрь 19, 2011, 22:14 Т.е. проблема только в том что получается запутанный код с большой вероятностью ошибки?
|