Войти
ПрограммированиеФорумОбщее

C++, семантика перемещения для возращаемого значения (2 стр)

Страницы: 1 2 3 Следующая »
#15
16:47, 10 апр. 2016

Delfigamer
> Зачем?

Чтобы ловить все бонусы "move-semantics" в контейнерах, в том случаи когда делаешь push_back и надо переаллоцировать память под них, вектор будет перемещать, а не копировать, например.
Я к тому, что раз юзать все фишки, так юзать все :) и RVO уже давно есть и работает, да.


#16
17:17, 10 апр. 2016

MATov
Так это перемещение элементов, а не самого контейнера. К тому же, у ОПа вообще POD.

#17
17:27, 10 апр. 2016

Delfigamer
> К тому же, у ОПа вообще POD.

Дык на будущие, обратить внимание, говорю же, раз думать об этом всём и юзать, так юзать всё что предлагают :)

#18
19:18, 10 апр. 2016

MATov
Я предпочитаю разбираться в вещях по порядку и думаю, что для ОПа это тоже будет полезнее, чем решать 100 проблем одновременно.

#19
23:10, 10 апр. 2016

gammaker
> Это не вызовет никаких конструкторов вообще, так как RVO (return value optimization).
NRVO

#20
0:57, 11 апр. 2016

Вореции
> не хватает одной буквы
Изображение

#21
2:07, 11 апр. 2016

gammaker
> Правда для класса Point, который не управляет памятью и не содержит членов,
> которые управляют памятью, это абсолютно бессмысленно. Конструктор перемещения
> не нужен, потому что он делает то же самое, что и конструктор копирования по
> умолчанию.

а вот тут поподробнее можно?
не могу понять, что именно я не понимаю в &&, но хочется больше разъяснений. Как так он делает то же самое, Страуструп же сказал "перенаправить указатели"?

#22
2:43, 11 апр. 2016

vater
Если указателей нету - перенаправлять нечего
gammaker
> для класса Point, который не управляет памятью

#23
9:25, 11 апр. 2016

Zackary
> хотелось бы так же иметь и ф-ию, прямо возвращающую вектор без лишнего
> копирования. Это возможно?
оптимизатор все сделает за вас https://msdn.microsoft.com/en-us/library/ms364057(v=vs.80).aspx

#24
12:16, 11 апр. 2016

MATov
> noexcept деструктор
)))

#25
12:26, 11 апр. 2016

TarasB
Чего смешного? :) Описал же даже ситуацию, когда это будет работать на пользу и не будет, если будет обычный деструктор.

#26
12:32, 11 апр. 2016

А что, уже завезли исключения в деструкторы?

#27
12:46, 11 апр. 2016

TarasB
> А что, уже завезли исключения в деструкторы?
кажется вместе с первым стандартом были

#28
13:06, 11 апр. 2016

TarasB
> А что, уже завезли исключения в деструкторы?

Их нельзя кидать там, но терминейта не будет по умолчанию, будет просто не понять что ) А вектору при переаллоцировании нужно гарантировать эксепшен сафити, поэтому и нужно всё пометить руками нынче.

Правка: У Маерса в крайней книжке есть хорошо про это.
Правка2: Хотя вот сейчас проверяю, роляет тока noexcept для move-конструктора, для деструктора пофик. Еще сча пару тестов.

Правка3: Ну короче да, я идиот, наслоилось что-то. noexcept деструкторы они по умолчанию, ибо от туда ничего кидать всё равно нельзя. Надо метить перемещающий конструктор, инача move не будет использоваться. cpp.sh/6qj4r

#29
13:35, 11 апр. 2016

MATov
А как-то можно сделать чтоб при бросании вызывался terminate, если нет размотки стека?

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.