Увидев, что С++ 11 поддерживает семантику переноса, при инициализации членов данных из аргументов мы должны попытаться перенести значение вместо его копирования?
Вот пример, показывающий, как я буду обращаться к этому в pre-С++ 11:
struct foo {
std::vector<int> data;
explicit foo(const std::vector<int>& data)
: data(data)
{
}
};
Здесь будет вызываться конструктор копирования.
В С++ 11 мы должны привыкнуть писать так:
struct foo {
std::vector<int> data;
explicit foo(std::vector<int> data)
: data(std::move(data))
{
}
};
Здесь конструктор перемещения будет вызываться... а также конструктор копирования, если переданный аргумент является значением lvalue, но преимущество в том, что если rvalue было передано, вместо этого будет вызываться конструктор перемещения.
Мне интересно, если что-то мне не хватает.