Избегание CRT

При написании приложения на C++ я обычно ограничиваюсь специфическими функциями языка C++. В основном это означает использование STL вместо CRT, где это возможно.

Для меня STL гораздо более гибок и удобен в сопровождении, чем использование CRT. Рассмотрим следующее:

std::string str( "Hello" );
if( str == "Hello" ) { ... }

Эквивалентом C-Runtime будет:

char const* str = "Hello";
if( strcmp( str, "Hello" ) == 0 ) { ... }

Лично я нахожу предыдущий пример гораздо более простым для восприятия. Просто мне стало понятнее, что происходит. Когда я пишу первый проход своего кода, первым делом я всегда пишу код наиболее естественным образом.

Одной из проблем моей команды в первом примере является динамическое распределение. Если строка является статической ИЛИ уже была выделена в другом месте, они утверждают, что не имеет смысла потенциально вызывать фрагментацию или расточительное выделение здесь. Мой аргумент против этого состоит в том, чтобы сначала написать код наиболее естественным образом, а затем вернуться и изменить его после получения доказательств того, что код вызывает проблему.

Еще одна причина, по которой мне не нравится последний пример, заключается в том, что он использует библиотеку C. Обычно я избегаю его любой ценой просто потому, что это не C++, он менее удобочитаем, более подвержен ошибкам и представляет больший риск для безопасности.

Итак, мой вопрос: правильно ли я избегаю C Runtime? Должен ли я действительно заботиться о дополнительном распределении на этом этапе кодирования? Мне трудно сказать, прав я или нет в этом сценарии.

5
задан jacknad 23 May 2012 в 17:11
поделиться