Для выполнения операций упаковки/распаковки данных прямо в памяти, можно использовать бесплатную библиотеку zlib (формат получаемых данных совместим с gzip).
This blog dedicated to C++ Software development and system configuration issues. Primary language is Russian.
вторник, 25 ноября 2008 г.
воскресенье, 23 ноября 2008 г.
generating debug information with visual c++
Откопал довольно интересную статью - вот здесь.
Несколько устаревшая, конечно, но для приведения знаний в систематезированный вид - очень рекомендую.
Рассматриваются виды отладочной инофрмации (в привязке к версиям), производится сравнение и обсуждается вопрос генерации файлов с базой данных приложения.
Несколько устаревшая, конечно, но для приведения знаний в систематезированный вид - очень рекомендую.
Рассматриваются виды отладочной инофрмации (в привязке к версиям), производится сравнение и обсуждается вопрос генерации файлов с базой данных приложения.
пятница, 21 ноября 2008 г.
Использование частей boost в своих проектах
Утащено отсюда.
"Беседуя с разными разработчиками внезапно выяснил, ...
Как выяснилось, многие из этих разработчиков просто не знают про замечательную утилиту bcp"...
"Беседуя с разными разработчиками внезапно выяснил, ...
Как выяснилось, многие из этих разработчиков просто не знают про замечательную утилиту bcp"...
четверг, 20 ноября 2008 г.
boost::shared_ptr - особенность удаления объектов
Увидал на блоге Raider'a (кстати, рекомендую).
Ситуация:
Главное - не забыть уничтожить удаляемые из контейнера объекты. И если делать это через оператор delete - еще про виртуальный деструктор у базового класса не забыть бы.
Хотя... другое классическое решение позволяет обойтись и без первого и без второго:
Наличие виртуального деструктора в таком случае не принципиально - shared_ptr запоминает как нужно удалять объект, по умолчанию это будет оператор delete для нужного типа.
BTW, при наличии виртуального деструктора, если уж связались с boost, и shared_ptr'ы используются только в этом контейнере, логичнее использовать boost::ptr_container.
Ситуация:
class A { ... };
class B : public A { ... };
std::vector BunchOfObjects;
BunchOfObjects.push_back(new B);
Главное - не забыть уничтожить удаляемые из контейнера объекты. И если делать это через оператор delete - еще про виртуальный деструктор у базового класса не забыть бы.
Хотя... другое классическое решение позволяет обойтись и без первого и без второго:
std::vector > BunchOfObjects;
BunchOfObjects.push_back(boost::shared_ptr(new B));
Наличие виртуального деструктора в таком случае не принципиально - shared_ptr запоминает как нужно удалять объект, по умолчанию это будет оператор delete для нужного типа.
BTW, при наличии виртуального деструктора, если уж связались с boost, и shared_ptr'ы используются только в этом контейнере, логичнее использовать boost::ptr_container.
воскресенье, 16 ноября 2008 г.
Auto-sorted vector + Александреску = ?
В который раз убеждаюсь, что читать книжки полезно, причем стреляет это в самые неожиданные моменты...
суббота, 15 ноября 2008 г.
cmdresc
Очередная крайне полезная утилита для работы с дампами - cmdresc.
Вкратце - это средство для создания исполняемых модулей (.EXE и .DLL) из минидампа по хранящейся в нем информации о модуле. Это не полноценные модули - запускать и загружать их нельзя :-), но их достаточно для того, чтобы отладчики грузили символы с сервера, а именно это нам чаще всего и нужно...
Вкратце - это средство для создания исполняемых модулей (.EXE и .DLL) из минидампа по хранящейся в нем информации о модуле. Это не полноценные модули - запускать и загружать их нельзя :-), но их достаточно для того, чтобы отладчики грузили символы с сервера, а именно это нам чаще всего и нужно...
понедельник, 3 ноября 2008 г.
Создание итератора-адаптера
Очень часто в коде С++ (и не обязательно производства "до рождества христова") встречается предоставляют доступа к набору каких-либо объектов в следующем виде:
Для использования стандартными алгоритмами такое представление неудобно, поскольку требует в лобовом варианте предварительного формирования промежуточного контейнера (sic!).
Решение проблемы достаточно простое (с использованием boost):
size_t GetItemCount();
value_type GetItem(size_t i);
Для использования стандартными алгоритмами такое представление неудобно, поскольку требует в лобовом варианте предварительного формирования промежуточного контейнера (sic!).
Решение проблемы достаточно простое (с использованием boost):
суббота, 1 ноября 2008 г.
Как правильно заполнять _NT_SYMBOL_PATH
На самом деле, переменная _NT_SYMBOL_PATH намного более многогранна, чем может показаться, это далеко не просто перечисление каталогов.
Подписаться на:
Сообщения (Atom)