C ++ с использованием wstring / wchar_t

Много раз, когда я разговариваю с людьми, они меня переучивают от использования (в проектах DLL) wstrings и strings, потому что они потребляют больше памяти, чем массив wchar_t. Как с этим? Для того же массива L"qweqweqweqweqwe" wchar_t требуется больше памяти, чем для wstring, или он незаметен? Теперь меня немного смущает, когда мне нужно конвертировать между Ansi и Unicode (многие new wchar_t temp и delete)


person user1112008    schedule 13.04.2012    source источник
comment
Извините, но я не понимаю, в чем ваш конкретный вопрос. Можете конкретно уточнить, что вам интересно?   -  person templatetypedef    schedule 13.04.2012


Ответы (2)


При обычном использовании вы не увидите значительной разницы в использовании памяти _1 _ / _ 2_ и символьными массивами. С другой стороны, если вы используете символьные массивы, ваш код может быть полон ошибок и утечек, и вы потратите все свое время на их устранение.

Все сообщество C ++ признает, что std::string - это способ обработки строк. Любые индивидуалисты, которые хотят использовать символьные массивы, должны быть вынуждены доказать свою точку зрения с помощью тестов. Бремя доказывания своей точки зрения должно лежать на фриках.

person David Heffernan    schedule 13.04.2012

"много новых wchar_t temp и удалить"

Обычно это очень плохая идея. Как говорит Страуструп, вы обычно должны полагаться на объекты, которые будут управлять памятью за вас (найдите RAII). Используйте необработанные указатели только в том случае, если это ДЕЙСТВИТЕЛЬНО необходимо и только глубоко в вашей реализации. Предпочитайте STL, предпочитайте интеллектуальные указатели, используйте ускорение, пишите новые и удаляйте только в том случае, если вам действительно нужно, и заботитесь о безопасности исключений. В противном случае вы потратите большую часть своего времени на отладку кода.

Ответ: если у вас нет действительно веской причины, используйте строковые классы. Разница в использовании памяти обычно незначительна. Оптимизируйте, только если профилировщик говорит вам об этом. «Преждевременная оптимизация - корень всех зол» (Дон Кнут).

person stein0r    schedule 13.04.2012