LINUX.ORG.RU

Если оригинальный контейнер хранится в объекте, можно возрващать ссылку на константный контейнер. Главное, чтобы объект при этом не убился (из другого потока например).

staseg ★★★★★
()
Ответ на: комментарий от UVV

Тогда, если не полагаешься на RVO, «возвращай» контейнер через аргумент-указатель. И еще в С++11 добавили семантику перемещения.

staseg ★★★★★
()

когда хотят сделать std::list<A> myMethod()

Они так и делают. А в клиентском коде: std::list<A> myList = std::move(myMethod());

Dendy ★★★★★
()
Ответ на: комментарий от UVV

Можешь возвращать просто по значение. В С++ 11 гарантировано copy elision

http://en.cppreference.com/w/cpp/language/copy_elision

В крайнем случае компилятор обязан использовать move-семантику.

Только ради Б-га не пиши return std::move();

placement_new ★★
()
Последнее исправление: placement_new (всего исправлений: 2)

Полагаться на RVO - это, может быть, и хорошо

Можно смело полагаться и не заморачиваться.

anonymous
()
Ответ на: комментарий от Dendy

Не нужно, гарантированно должно и без этого работать.

Kuzy ★★★
()
Ответ на: комментарий от Dendy

А в клиентском коде: std::list<A> myList = std::move(myMethod());

Явный move нужен только для «именованых обьектов» (если по простому). В данном случае это избыточно.

DarkEld3r ★★★★★
()
Ответ на: комментарий от placement_new

В С++ 11 гарантировано copy elision

(12.8/31)

When certain criteria are met, an implementation is allowed to omit the copy/move construction of a class object, even if the copy/move constructor and/or destructor for the object have side effects.

Можно узнать, где стандарт C++11 обязывает применять copy elision?

Dendy ★★★★★
()

Смело возвращать по значению. Полагаться ни на что не нужно - в худшем случае будет вызван бесплатный move constructor.

slovazap ★★★★★
()

Если не C++11, то заменить на выходной аргумент (неконстантная ссылка).

xaizek ★★★★★
()
Ответ на: комментарий от Dendy

Школота может быть так и делает, а все остальные std::list<A> myList = myMethod();

anonymous
()

Полагаться на RVO

RVO сейчас умеют все даже самые тупорылые компиляторы, быть может, только кроме наколеночных или 20-летней давности.

mix_mix ★★★★★
()
6 июня 2015 г.

Поясните пожалуйста, чем это черевато? Почему нехорошо просто вернуть по значению?

WRG ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.