Re: swap внутри функции для параметра-результата
От: Evgeny.Panasyuk Россия  
Дата: 01.03.13 19:53
Оценка: 1 (1) +1 -1
Здравствуйте, sanx, Вы писали:

S>Код 1:

S>
S>bool func(const type &param, 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 &param, 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 &param, std::string &result)
S>{
S>    // формируем/получаем используя result <--- Память возможно даже не аллоцируется,
S>    а реиспользуется capcity из result
S>    return ok;
S>}
S>

S>Есть разница? Когда как лучше поступать?

В порядке убывания эффективности: 3, 1, 2.
Всегда(когда возможно) лучше исполользовать 3.
Без дополнительный ограничений(типа: не менять result при исключении) применений для 1, а тем более для 2 — не вижу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.