Вчера наконец-то разместил на Bitbucket (аналог GitHub) исходные файлы всех трёх томов своего проекта Шпаргалка Windows API. Зачем я это сделал? Причин несколько. Продолжить чтение →
Итераторы не защищают от переполнения
Итераторы были введены в С++ в качестве основного механизма доступа к элементам контейнера. Они должны обеспечивать унифицированный объектно-ориентированный доступ к элементам. Но насколько он безопасен? То есть, защищают ли итераторы от индексного переполнения? Давайте проверим. Продолжить чтение →
std::vector при нехватке памяти
Контейнер std::vector представляет собой динамический массив, автоматически увеличивающийся в размере по мере надобности. Он описан в любом приличном руководстве по С++. Там же описываются его методы, достоинства и недостатки по сравнению с другими контейнерами.
В руководствах говорится, что при добавлении нового элемента может потребоваться выделение дополнительной памяти. Но ни одно из них (из тех, что я встречал) не дает ответа на вопрос: что произойдет, если выделить память не удастся? Память ведь не бесконечна. Продолжить чтение →
GCC требует открытого конструктора копирования для C++98
В одной из своих прошлых статей я рассказывал, что при возврате объектов GCC не использует конструктор копирования, сразу размещая объекты там, где они должны располагаться. Однако, в некоторых случаях GCC требует наличия открытого конструктора копирования. Продолжить чтение →
Wine неправильно обрабатывает исключения в 64-битных приложениях
Wine — популярная программа для запуска Windows приложений в среде Linux. Как оказалось в ней содержится серьезная ошибка, не позволяющая полноценно использовать 64-битные приложения. Продолжить чтение →
Не используйте std::move при возврате объектов
Конструкторы и операторы перемещения являются важным нововведением С++11. Про них много написано, и я не стану повторять основы. Вместо этого я хотел бы сосредоточиться на таком вопросе, как возвращение объектов. Нужно ли для этого использовать функцию std::move или нет? Продолжить чтение →
GLib не обеспечивает размер типа guint64
В одном из своих прошлых постов я рассказывал, как компилировать приложения, использующую библиотеку GTK. Однако, как оказалось, входящая в ее состав библиотека GLib имеет одну неприятную особенность. Продолжить чтение →
Пользователи в Ubuntu (Linux Mint)
Несколько месяцев назад меня озадачили вопросом: какой пароль от root в Linux Mint? Я пользуюсь этой системой не один месяц и к своему стыду никогда по-настоящему не задумывался над этим вопросом. А зря. Для выполнения административных действий я использовал пароль от пользователя, указанный мной при установке системы. Но текущий пользователь и root — это не одно и тоже. Продолжить чтение →
__cplusplus в разных компиляторах
Макрос __cplusplus изначально создавался для предоставления программистам возможности определения факта использования компилятора С++. Это было нужно для создания кода, который мог бы компилироваться как «новыми» (на то время) компиляторами С++, так и старыми для языка С. В частности он используется для отключения украшения имён (если нужно). Продолжить чтение →
Шорт-код плагина Really Simple CAPTCHA
На днях в очередной раз убедился в том, что поиск нужной информации в Интернет — не всегда простая задача. Она может отнять много времени и нервов. Продолжить чтение →