Re[6]: const char* const - Путаница
От: joe_kidd  
Дата: 18.12.09 13:17
Оценка: +1
CS>Здравствуйте, x905, Вы писали:

X>>не совсем в тему, но предлагаю перейти на "классовые" строки типа QString — проблем будет меньше

CS> Это совсем не в тему.

CS>Слепое использование QString или std::string в тех местах где можно обойтись просто const wchar_t* или slice<wchar_t>

CS>может привести к одной но зело неприятной проблеме — перерасход и/или фрагментация heap.

По моему совет то как раз именно в тему — сишные массивы нужно использовать только когда они действительно необходимы.
И вместо них нужно использовать врапперы (в данном случае std::string) и не только для возврата результата, но и для полей внутри класса.
Преимущества:
— нет проблем с размерами (не нужно заботиться о расширении и выходе за границу массива),
— удобные операции конкатенации, поиска, прохода по контейнеру
Недостатки:
— уже указанная фрагментация кучи процесса и как следствие — тормоза при выделении памяти из кучи.

Отсюда мой вывод — использовать всегда врапперы, пока тесты не начинают показывать что производительность не соответствует требованиям к продукту.
И то в этом случае можно перейти на аллокаторы отдающие память не из кучи а из пула на стеке.
Короче, как говорится:
"
1. сделай чтобы это работало,
2. сделай чтобы это работало правильно
3. и только потом сделай чтобы это работало быстро".

И вообще — берем "Стандарты программирования на C++" Александреску и Саттера и смотрим совет 77 "Вместо массивов используйте vector и string":

Избегайте реализации абстракции массива посредством массивов в стиле C, арифметики указателей и примитивов управления памятью. Использование vector и string не только сделает проще вашу жизнь, но и позволит написать более безопасную и масштабируемую программу.


CS>Если понятие const char* вызывает проблемы то имхо следует уже переходить на .NET/Java. Там во всяком случае не будет фрагментации.

А если:
— плюсы корпоративный стандарт,
— куча кода на C++
— весь third party API — плюсовый
Да и есть ли в .NET/Java такие же удобные алгоритмы и boost как в плюсах?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.