Здравствуйте, Denwer, Вы писали:
D>Последние два месяца прорезюмировал просто толпу соискателей на программистов по с++. Каково было мое удивление что 90% людей не знаю ДЛЯ ЧЕГО НУЖЕН ВИРТУАЛЬНЫЙ ДЕСТРУКТОР. Как такое может быть? Куда делись настоящие программситы, а не оходники за деньгами? Что творится с людьми?
По многу раз наблюдал на работе людей, которые и что такое вирт. деструктор знают и паттерны, там всякие шматерны, любят пообсуждать всякие архитектурные решения, да только вот загвоздка: работа у них движется по черепашьи, потому что, весь день у них уходит на бла-бла и сидение по форумам. При этом он считает, наверное, что бабло ему просто должны платить по факту, что он такой умный и знает про вирт.деструктор. Чтобы этот человек хоть что-то сделал, нужно над ним буквально стоять, при этом он тебе будет звучно рассказывать, про проблемы иерархии классов и межпоточной синхронизации..
В итоге сам садишься и делаешь за 50 минут. Или приходит молодой студентик с горящими глазами и тоже раз-раз и делает,
хотя действительно может местами и с глюкотроном. Я не говорю, что такое встречается повсеместно, но точно имеет место быть, и поэтому я бы все все-таки задумался, всегда ли надо ставить во главу угла, знает ли человек, чем dynamic_cast
отличается от static или про вирт. деструктор. Или зачем конструктору добавляется ключевое слово explicit. Я лично таких работодателей не совсем понимаю.. Лучше уж дать РЕАЛЬНОЕ практическое задание и посмотреть, как быстро справится, насколько оптимален и безглючен будет код..Сразу ведь все о человеке понятно! Если опытный пораспрашивать про предыдущие проекты.
Здравствуйте, Unhandled_Exception, Вы писали:
U_E>Здравствуйте, мыщъх, Вы писали:
М>> однако, разница в стоимости вызова виртуальных и невиртуальных функций довольно-таки существенна
U_E>а сильно существенна? т.е. что я хотел узнать, это правда, что может быть такой случай, когда именно виртуальность вызова особенно сильно тормозит код?
ну это же можно составить тест и погонять если функция делает что-то полезное (например, занимается сортировкой), но накладыми расходами на виртуальность можно пренебречь. а вот популярный в некоторых кругах стиль: "функция из нескольких строк, вызывающая тучу других функций из нескольких строк" уже сильно проигрывает.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, мыщъх, Вы писали:
М>ну это же можно составить тест и погонять если функция делает что-то полезное (например, занимается сортировкой), но накладыми расходами на виртуальность можно пренебречь.
и даже в подобном случае мне как-то пришлось переписывать классы, потому что виртуальность была всунута "на всякий случай", а профайлер показал существенное замедление на вызове виртуальной функции
Здравствуйте, jhfrek, Вы писали:
J>Здравствуйте, Ikemefula, Вы писали:
I>>Скажи ты что нибудь внятное, например, "человек со знанием двух языков, но без знания алфавита и грамматики в ряде случаев может быть полезнее студента ин-яза", то можно было бы согласиться
J>ты сумел превозмочь ЧСВ и понять что я имел в виду в самом начале — респект. Значит не зря я тратил свое время на переписку.
Тут нечего понимать, т.к. это банальность на уровне плинтуса.
Потому ты и сел в лужу, когда не смог внятно её сформулировать, более того, даже сфероконь понадобился.
Здравствуйте, COFF, Вы писали:
COF>Здравствуйте, vpchelko, Вы писали:
V>>Имхо, работаю девелопером уже 4год на большом проекте. Вирт деструкторы ползовался ... забыл когда...
COF>Значит ты не проектировал более-менее сложных иерархий классов. Скорее всего просто расширял существующие. Это не плохо, само по себе, просто хорошо характеризует твой опыт
Да приходится ковырять чужой код, добавлять что-то свое и переписывать. Очень много проблем с утечкой памяти, в основном изза того, что был код работающий с нативными указателями.
Для любой иерархии классов — для создания некого объекта — надо писать фарбики обьектов, возвращающие только безопасный указатель, который должен знать как правильно удалить объект. Как писали выше "а зачем оно же нужно", если есть boost::shared_ptr.
Здравствуйте, vpchelko, Вы писали:
V>Здравствуйте, COFF, Вы писали:
COF>>Здравствуйте, vpchelko, Вы писали:
V>>>Имхо, работаю девелопером уже 4год на большом проекте. Вирт деструкторы ползовался ... забыл когда...
COF>>Значит ты не проектировал более-менее сложных иерархий классов. Скорее всего просто расширял существующие. Это не плохо, само по себе, просто хорошо характеризует твой опыт
V>Да приходится ковырять чужой код, добавлять что-то свое и переписывать. Очень много проблем с утечкой памяти, в основном изза того, что был код работающий с нативными указателями.
V>Для любой иерархии классов — для создания некого объекта — надо писать фарбики обьектов, возвращающие только безопасный указатель, который должен знать как правильно удалить объект. Как писали выше "а зачем оно же нужно", если есть boost::shared_ptr.
П.с. последний раз использовать виртуальный деструктор в базовом классе, для того чтобы его наследники были виртуальными классами, чтобы работал dynamic_cast.
S>Глядя на этот топик начинающие программисты поидее должны тренироваться в изгнании из головы мыслей типа "перепейсать фсё нахъ ибо неподдержуимо!!!".
Здравствуйте, Vamp, Вы писали:
V>А можно мне объяснить, в чем принципиальная разница между бинарным семафором и мьютексом с теорической точки зрения (учитывая, что в С++ нет ни тех, ни других, вопрос можно ставить только в теоретичской плоскости).
У семафора нет понятия владельца. Его может освободить не только тот поток-процесс-whatever, который захватил, но и любой другой.
Здравствуйте, jhfrek, Вы писали:
J>что ЧСВ таки чешется, даже после признания моей победы
Ты вероятно не понял, что это значило
I>>Тут нечего понимать,
J>и тем не менее ты не понял и начал спорить
Тем не менее я тебе сразу заявил, что ты сел в лужу. Нужно время, что бы ты это понял.
I>>т.к. это банальность на уровне плинтуса.
J>рад что ты самокритично оцениваешь свой уровень
Здравствуйте, jhfrek, Вы писали:
J>>>рад что ты самокритично оцениваешь свой уровень I>>Слабенько
J>"слабенько" — это слабо сказано. Твой уровень запредельно низок
Здравствуйте, Eye of Hell, Вы писали:
EOH>На зарплату 50-80 сейчас, увы, высококлассные специалисты не пойдут
Сакральное знание о виртуальных деструкторах — это признак не высококлассного, а хоть какого-нибудь C++ программиста. Если не знает, ему лучше вообще этот язык в руки не давать.
Здравствуйте, jhfrek, Вы писали:
J>>>"слабенько" — это слабо сказано. Твой уровень запредельно низок I>>Тем хуже для тебя.
J>не просто хуже, это верх моей наивности, ввязываться в дискуссию с тобою, зная о твоей неадекватности при ведении оных.
Ничего необычного в этом нет — ты продолжаешь садиться в лужу раз за разом и замечаешь это слишком поздно.
Здравствуйте, Ikemefula, Вы писали:
J>>не просто хуже, это верх моей наивности, ввязываться в дискуссию с тобою, зная о твоей неадекватности при ведении оных. I>Ничего необычного в этом нет
в твоей неадекватности, действительно, нет ничего необычного
Здравствуйте, jhfrek, Вы писали:
J>>>не просто хуже, это верх моей наивности, ввязываться в дискуссию с тобою, зная о твоей неадекватности при ведении оных. I>>Ничего необычного в этом нет
J>в твоей неадекватности, действительно, нет ничего необычного
U_E>а сильно существенна? т.е. что я хотел узнать, это правда, что может быть такой случай, когда именно виртуальность вызова особенно сильно тормозит код?
учитывай, что сравнивать виртуальный вызов нужно не с обычным вызовом, а заинлайненной функцией.