Итераторы не защищают от переполнения

Итераторы были введены в С++ в качестве основного механизма доступа к элементам контейнера. Они должны обеспечивать унифицированный объектно-ориентированный доступ к элементам. Но насколько он безопасен? То есть, защищают ли итераторы от индексного переполнения? Давайте проверим. Читать полностью →

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 изначально создавался для предоставления программистам возможности определения факта использования компилятора С++. Это было нужно для создания кода, который мог бы компилироваться как «новыми» (на то время) компиляторами С++, так и старыми для языка С. В частности он используется для отключения украшения имён (если нужно). Читать полностью →

Тестирование консольной программы с помощью сценария оболочки Linux

В двух предыдущих статьях мы рассмотрели как тестировать программу с помощью пакетных файлов Windows. Сегодня поговорим о том, как сделать то же самое с помощью сценариев оболочки Linux. Читать полностью →