Я тут вспомню, как мы играли всеми программистскими отделами в футбол. Эх.. веселое было время...
вторник, 6 ноября 2012 г.
понедельник, 5 ноября 2012 г.
суббота, 3 ноября 2012 г.
Программисты астеники и гиперстеники
Все программисты делятся на три типа: астеники, гиперстеники и нормостеники. Поведение у них сильно отличается в зависимости от принадлежности к какому-либо типу. Нормостеники довольно редки, да и обязаны этим в основном природе, а не тренажерному залу.
понедельник, 1 октября 2012 г.
суббота, 22 сентября 2012 г.
О трудностях, подстерегающих программистов
Иногда так бывает работаешь, работаешь, закопаешься в рутине, а потом вдруг прочитаешь на форуме: "Да, вот работаю программистом во Франции/Норвегии/США/пр.". Думаешь, опа, а как же я? Я ведь не хуже,"Малыш, я же лучше... собаки!"(с). И лет ему меньше, да и фирма заграничная/больше/известнее. Где же я был, почему я не там, а здесь и з.п. у меня меньше/не в долларах? Начинаешь злиться/завидовать/плакать/громить/отыгрываться на подчиненных(редко).
Конечно, зависть редко посещает программистские умы, но бывает, у меня бывает, да и ко мне бывает. А что же за таким успехом скрывается?
пятница, 29 июня 2012 г.
среда, 28 марта 2012 г.
вторник, 27 марта 2012 г.
четверг, 1 марта 2012 г.
Примеры использования shared_ptr
Продолжаем тему умных указателей. Рассмотрим подробнее shared_ptr.
Основное, что можно сказать о shared_ptr, это то, что объект, на который указывают shared_ptr-ы,
будет удален, когда самый последний shared_ptr будет уничтожен или сброшен с помощью reset().
void f(){
boost::shared_ptr<A> ptr1(new A);
boost::shared_ptr<A> ptr2 = ptr1;
boost::shared_ptr<A> ptr3 = ptr1;
}
Иллюстрация к коду:воскресенье, 26 февраля 2012 г.
четверг, 23 февраля 2012 г.
вторник, 21 февраля 2012 г.
Неглупые указатели (smart_pointers)
Студент увидел как-то на рынке, что какой-то мужик
продает мозги разных специалистов. Заинтересовался,
подходит, спрашивает что почем. Ему объясняют:
«Это мозги математика, они по сто рублей за килограмм,
это – мозги физика, они – по двести за кило, а вот эти
– мозги философа, они самые дорогие, по две тысячи».
Студент проникся уважением, спрашивает:
«Что, философские мозги и правда такие хорошие?»
«Да нет, дело не в этом, просто представь, это же
сколько философов отловить надо, чтобы набрать
целый килограмм мозгов!»
– мозги философа, они самые дорогие, по две тысячи».
Студент проникся уважением, спрашивает:
«Что, философские мозги и правда такие хорошие?»
«Да нет, дело не в этом, просто представь, это же
сколько философов отловить надо, чтобы набрать
целый килограмм мозгов!»
Прочитав Скотта Майерса, я стала противником auto_ptr. Auto_ptr - это зло-зло! Я об этом сказала своему начальнику. Он же сделал круглые глаза и выразил удивление, чем меня сильно озадачил. Я опять повторила: "Зло-Зло!". А он: "Почему?". Когда я объяснила, почему зло, он сделал простейший вывод: "Просто не надо их использовать в контейнерах." Действительно, подумала я... :)
И так небольшой обзор умных указателей:
STL:
- auto_ptr - только не для использования в контейнерах!! (См. Скотт Майерс, "Effective STL", совет №8)
- weak_ptr - (доступен только в ISO/IEC 14882:2011, или при указании опции компиляции -std=c++0x)
- shared_ptr - (доступен только в ISO/IEC 14882:2011, или при указании опции компиляции -std=c++0x)
И вообще, в файлы с новым стандартом лучше не заглядывать - незаметно сносит крышу. То есть вроде бы всё на месте, а холодком веет. Необычные конструкции вроде таких, пугают: shared_ptr(shared_ptr&& __r), но об этом можно почитать здесь.
Boost:
- scoped_ptr - самый простой умный указатель. Как написано в комментариях - simple solution for simple needs. Умеет возвращать память при выходе из области видимости (в деструкторе). Умеет делать get(), reset(), swap();
- intrusive_ptr - умный указатель со встроенным счетчиком ссылок. Может быть создан из произвольного raw-указателя (сырого указателя) типа T*. Блок памяти для intrusive_ptr такой же, как и для соответствующего raw-указателя. Умеет делать get(), reset(), swap(). Но для него придется определить функции подсчета ссылок и освобождения памяти. В конструкторе intrusive_ptr( T * p, bool add_ref = true ) вторым параметром (как это ясно из названия) можно повлиять на увеличение счетчика в первый раз. Его удобно использовать при разработке, где требуется самому определять не только, как освободить память, но и как работает счетчик ссылок. Главное правильно, если не ясно какой из двух использовать: его или shared_ptr, попробуйте использовать сначала shared_ptr;
- weak_ptr - слабенький указатель :). Используется совместно с shared_ptr. Хранит ссылку на объект, которым уже владеет shared_ptr. Для доступа к хранимому объекту нужно перейти к shared_ptr, используя соответствующий конструктор: template<class Y> explicit shared_ptr(weak_ptr<Y> const & r). Есть внутренние переменные: указатель на данные, счетчик ссылок (boost::detail::weak_count). Умеет делать lock() - защита от удаления объекта и сказать, что объект уже никем не используется с помощью функции expired();
- shared_ptr - умный указатель посложнее. Есть внутренние переменные - указатель на данные, счетчик ссылок (boost::detail::shared_count). Его использование гарантирует, что объект будет удален, когда последний shared_ptr, указывающий на него, уничтожится или сбросится (reset()).
Подписаться на:
Сообщения (Atom)