Постоянные члены класса, оператор присваивания и QList

Пожалуйста, подтвердите, если я прав, и скажите мне, есть ли лучшее решение:

Я понимаю, что объекты с постоянными членами, такими как int const width; не может обрабатываться оператором синтетического присваивания, который неявно создается компилятором. Но QList (и я полагаю, что std :: list тоже) нуждается в рабочем операторе присваивания. Поэтому, когда я хочу использовать объекты с постоянными членами и QList, у меня есть три возможности:

  1. Не использовать постоянные члены. (Не решение)
  2. Реализовать мой собственный оператор присваивания.
  3. Использовать другой контейнер, который не требует присваивания операторы

Это верно? Есть ли другие элегантные решения?

Также мне интересно, могу ли я:

  • (4) Заставить компилятор создать оператор присваивания, который имеет дело с константными членами! (Я не понимаю, почему это такая большая проблема. Почему оператор недостаточно умен, чтобы использовать списки инициализации внутри себя? Или я что-то упустил?)
  • (5) Сообщите QList, что я никогда не буду использовать операции присваивания в список.

РЕДАКТИРОВАТЬ: Я никогда не назначаю объекты этого класса сам. Они создаются только конструктором копирования или перегруженным конструктором. Таким образом, оператор присваивания требуется только контейнеру, а не мне.

EDIT2: Это оператор присваивания, который я создал. Я не уверен, что это правильно. Ячейка имеет конструктор с двумя параметрами. Эти параметры устанавливают два постоянных члена со списками инициализации. Но объект также содержит другие переменные (не const) члены.

Cell& Cell::operator=(Cell const& other)
{
 if (this != &other) {
  Cell* newCell = new Cell(other.column(), other.row());
  return *newCell;
 }
 return *this;
}

EDIT3: Я нашел этот поток почти с тем же вопросом: C ++: Проблемы STL с членами класса const Все ответы, объединенные вместе, дали ответы на мои вопросы.

5
задан Community 23 May 2017 в 12:18
поделиться