Какой оператор ctor / присваивания должен иметь векторный класс?

Я пишу свой собственный векторный класс (контейнер для значений x, y), и я не совсем уверен, какие конструкторы / операторы присваивания я должен реализовать самостоятельно и что я могу рассчитывать на компилятор. Очевидно, мне нужно написать любой метод, который не имеет поведения по умолчанию или не генерируется автоматически в любом случае. Но, конечно же, нет смысла что-то реализовывать, если компилятор может генерировать точно такую ​​же вещь.

Я использую Visual Studio 2010 (что может иметь значение в аспекте C ++ 11). Также мой класс — шаблонный, если это имеет значение.

В настоящее время у меня есть:

template <typename T>
class Integral2
{
// ...

Integral2(void)
: x(0), y(0)
{}

Integral2(Integral2 && other)
: x(std::move(other.x)), y(std::move(other.y))
{}

Integral2(T _x, T _y)
: x(_x), y(_y)
{}

Integral2 & operator =(Integral2 const & other)
{
x = other.x;
y = other.y;
return *this;
}

Integral2 & operator =(Integral2 && other)
{
x = std::move(other.x);
y = std::move(other.y);
return *this;
}

// ...
};

Нужно ли копировать ctor / оператор присваивания, когда у меня есть оператор ctor / move?

1

Решение

В C ++ есть Правило трех в котором приведены рекомендации, для которых нужно определить конструкторы / операторы, исходя из того, что вам нужно. В C ++ 11 некоторые считают, что семантика перемещения выдвигает правило трех к стать правилом пяти. смотреть на эта тема для примера реализации. Я рекомендую вам ознакомиться с этими рекомендациями.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]