перемещение может быть настолько эффективным, насколько уже есть копия.
вая высокое качество современных компиляторов в отношении оптимизации возвращаемого значения (как RVO, так и NRVO), мне было интересно, для какой сложности класса имеет смысл начинать добавлять конструкторы перемещения и операторы присваивания перемещения.
Например, для этогоreally_trivial
Класс, я просто предполагаю, что семантика перемещения не может предложить ничего больше, чем RVO и NRVO уже делает при копировании вокруг его экземпляров:
class really_trivial
{
int first_;
int second_;
public:
really_trivial();
...
};
Хотя в этомsemi_complex
класс, я бы добавил конструктор перемещения и оператор присваивания перемещения без колебаний:
class semi_complex
{
std::vector<std::string> strings_;
public:
semi_complex(semi_complex&& other);
semi_complex& operator=(semi_complex&& other);
...
};
Итак, в каком количестве и с какими переменными-членами имеет смысл добавлять конструкторы перемещения и операторы присваивания перемещения?