ТолиБлог

Немножечко обо всем и чуточку больше
Options:

Archive for the ‘C++’ Category

В строго типизированных языках нельзя использовать имя сущности до ее обьявления(при компиляции создается таблица символов, которая заполняется сверху вниз и использование неопределенного символа ведет к ошибке компиляции). Что же делать когда, например, надо определить рекурсивную связь между классами?

class C1 {
C2 *c2;
};
class C2 {
C1 *c2;
};

Как их не располагай […]

Вот накнулись на ситуацию, типичную для начинающего программиста. Человек написал класс для получения строк из файла. Приводить интерфейсную часть не буду, только покажу кусочек реализации одного из методов:

bool stringProvider::next(string &store) {
mutex.lock();
bool res = getline(in,store);
mutex.unlock();
return res;
}

ничего […]

strcpy vs strncpy

Для копирования Си строк существуют две функции стандартной библиотеки Си:
strcpy(char *src, char *dst);
strncpy(char *src, char *dst, int len);

Обе память под результирующуюю строку не выделяют - делать это надо ручками. И еще - они существенно отличаются. Кроме того, что нижняя копирует только первые len символов, она еще и не копирует завершающий […]

Смешивание string и char*

Наиболее распространенное представление строк в Си++ - классические строки Си и класс string из STL. Каждое представление удобно по своему - string обеспечивает автоматическое выделение памяти, перегрузку операторов и освобождение буфера в деструкторе. char* не содержит никаких довесок влияющих на производительность, но не предоставляет абсолютно никакого контроля над данными - выделение памяти, освобождение надо делать […]

Множество людей при изучении С/С++ поломали зубы именно на указателях. Указатель - это та вещь, которая приближает Си к языкам машинного уровня, так как дает возможность эффективно манипулировать памятью. Давая огромную функциональность и свободу в обращении, указатели таят в себе множество подводных камней, которые способны потопить начинающего программиста и навсегда отбить охоту изучения данного языка.
Попытаюсь […]

Предположим, возникла необходимость в некоторой функции выделить область памяти для временного использования. При выходе из функции память нужно освободить - иначе она начнет потихоньку расходоваться и в конце-концов просто может закончится. Если точка выхода одна, то проблем нет - перед выходом вызываем delete и вопрос решен. А если их несколько? Конечно, можно перед каждым return […]

Загадочный typename

Вот, обновили компилер на сервере(GCC) с 3.2 до 4.0.1. Компилить он стал быстрее но некоторые старые исходники перестали на нем компилится вообще. Танцы с бубном помогли понять причину этого и устранить. Оказывается, более старые версии были лояльными к использованию typename и они могли без помощи программиста определить что используемый идентификатор это имя типа, а не […]

опасность класса string

Я не буду здесь рассматривать интерфейс данного класса из STL. Я только предупрежу Вас об одной скрытой опасности, которая может возникнуть при его использовании.
Есть в данном классе конструктор, принимающий char* как аргумент и копирущий значение Си-строки в себя. Хороший он, но опасненький. Если Вы передадите ему 0(NULL иначе говоря), то Ваша програмка аккуртненько слелит. Казалось, […]

Коротко о строках Си

Строка - это просто набор символов. Не больше и не меньше. Исходя из этой природы в Си строка - это обычный массив символов, заканчивающийся символом ”(проще говоря, нулем). Язык не имеет встроеннных средств по работе со строками и предполагает наличие внешней библиотеки для их обработки. Стандартная библиотека языка содержит такой набор функций, они хорошо описаны […]

Календарик

May 2008
M T W T F S S
« Apr    
 1234
567891011
12131415161718
19202122232425
262728293031  

Copyright 2008 - ТолиБлог
Powered by WordPress - Web hosting Services by Wordpress Theme, Archived by WPT