Здравствуйте, sanx, Вы писали:
S>Код 1:
S>S>bool func(const type ¶m, std::string &result)
S>{
S> std::string s;
S> // формируем/получаем s <--- Аллоцируется память
S> if (ok)
S> result.swap(s); <--- быстрый swap
S> return ok;
S>}
S>
S>И код 2
S>S>bool func(const type ¶m, std::string &result)
S>{
S> std::string s;
S> // формируем/получаем s <--- Аллоцируется память
S> if (ok)
S> {
S> result.assign(s); <--- строка копируется;
S> в этот момент в памяти есть две одинаковые строчки: s == result
S> }
S> return ok;
S>}
S>
S>код 3
S>S>bool func(const type ¶m, std::string &result)
S>{
S> // формируем/получаем используя result <--- Память возможно даже не аллоцируется,
S> а реиспользуется capcity из result
S> return ok;
S>}
S>
S>Есть разница? Когда как лучше поступать?
В порядке убывания эффективности: 3, 1, 2.
Всегда(когда возможно) лучше исполользовать 3.
Без дополнительный ограничений(типа: не менять result при исключении) применений для 1, а тем более для 2 — не вижу.