Будет ли реализована семантика перемещения в тривиально копируемой структуре? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть такая структура:

template <class T> struct Dimensions
{
    T horizontal{}, vertical{};

    Dimensions() = default;
    Dimensions(const T& horizontal, const T& vertical)
        : horizontal(horizontal), vertical(vertical) {}
    Dimensions(const Dimensions& other) = default;
    Dimensions& operator=(const Dimensions& other) = default;
    Dimensions(Dimensions&& other) = default; // ?
    Dimensions& operator=(Dimensions&& other) = default; // ?
    ~Dimensions() = default;

    // ... + - * / += -= *= areNull() ...

}

, которую я создаю как Dimensions<int> или Dimensions<double>.Так как это тривиально копируемое , какова будет лучшая политика здесь, сгенерировать конструктор перемещения и операторы присваивания перемещения как = default или избежать неявных с помощью = delete?

1 Ответ

0 голосов
/ 08 июня 2018

генерирует конструктор перемещения и операторы присваивания перемещения как = default или избегает неявных с помощью = delete?

первых, если вы не хотите какой-либо код, который пытается std::move ваш тип для сбоя компиляции.Например,

template <typename T>
void foo()
{
    T a;
    T b = std::move(a);
}

struct X
{
    X() = default;
    X(X&&) = delete;
};

int main() { foo<X>(); }

живой пример на wandbox.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...