Какие операторы реализовать с помощью int members

У меня есть класс, который имеет несколько int и const int member с определенным конструктором.

class SomeContainer
{
 public:
 SomeContainer():
 member1(0),
 member2(staticMethod())
 {}
 private:
 static int staticMethod();
 int member1;
 const int member2;
}

Мне нужно создать оператор присваивания, так как я использую этот класс в другом классе MainClass и code

MainClass* p1;
MainClass* p2
{
 //...
 *p1 = *p2 // fails since SomeContainer doesn't have copy assignment operator
}

Должен ли этот код быть достаточно или я что-то пропустил?

{
 SomeContainer(const SomeContainer& other): // copy ctor
 member1(other.member1),
 member2(other.member2)
 {}


 SomeContainer& operator=(const SomeContainer& other) // assignment operator
 {
 member1 = other.member1;
 }
}

как насчет перемещения ctor и переместить назначение? Должен ли я также реализовать их?

3 ответа

То, что вы написали, достаточно.

Если конструктор перемещения не существует, вместо него будет использоваться конструктор копирования, и здесь нет смысла в семантике перемещения.


Прежде всего, если p1 и p2 являются указателями, вы можете просто назначить их.

В случае, если конструктор перемещения отсутствует, вместо него будет использоваться конструктор копирования.

Мне остается трудно понять, что является логическим значением, позволяющим присваивать то, что имеет постоянные нестатические части.


Просто удалите const из этого члена, если вам действительно нужно назначение

licensed under cc by-sa 3.0 with attribution.