Несколько подробностей об std::string
Недавно заинтересовался реализацией std: string в libstdc++. Не в связи с принятием нового стандарта, а чтобы разобраться. Благо требования к строковму типу почти не изменились. Основным средством для анализа кода несомненно является метод пристального вглядывания, но чтобы сузить область вглядывывания и сделать процедуру более захватывающей можно реализовать для строки идиому «трассер» подсмотренную в «C++ Templates: The Complete Guide». Трассировка позволяет выявлять подозрительные интересные операции над строками. Как известно, std: string это псевдоним для std: basic_string и нам ничего не мешает определить std: basic_string. В X можно определить несколько статических счетчиков и итерировать их в конструкторе, деструкторе и остальных методах. Выполняя разные операции над такой строкой можно будет проследить эффективность применяемых алгоритмов в терминах количества операций. Кроме того, в g++ для std: string a («entrails»); выражение std: cout << reinterpret_cast(*((void**)(&a))); выведет содержимое строки. Т.е. std::string — является, по сути, указателем на char. Вобщем, эти и другие шокирующие поднобности под катом. Читать дальше →