Как понять, где я должен удалить конструктор копирования и оператор присваивания?

Я пишу игру и основываюсь уже на написанном коде. Читаю код и делаю по аналогии, разбираясь заодно со всякими фишками. В коде наткнулся на следующее:

class InputManager final : public Currenton<InputManager>
{
private:
  friend class KeyboardMenu;
  friend class JoystickMenu;

public:
  InputManager(KeyboardConfig& keyboard_config,
               JoystickConfig& joystick_config);
  ~InputManager() override;

  void process_event(const SDL_Event& event);

  void update();
  void reset();

  void use_game_controller(bool v);
  bool use_game_controller() const { return m_use_game_controller; }

  const Controller& get_controller() const;
  Controller& get_controller();

private:
  std::unique_ptr<Controller> controller;

public:
  bool& m_use_game_controller;
  std::unique_ptr<KeyboardManager> keyboard_manager;
  std::unique_ptr<JoystickManager> joystick_manager;
  std::unique_ptr<GameControllerManager> game_controller_manager;

private:  /*<- Вот этот МОМЕНТ */
  InputManager(const InputManager&) = delete; /*<- Вот этот МОМЕНТ */
  InputManager& operator=(const InputManager&) = delete; /*<- Вот этот МОМЕНТ */
};

Почему разработчики удаляют оператор присваивания и конструктор копирования в private поле? С чем это связано? Ведь они определены в public по дефолту. Какая разница между удалением в private и public ? Есть ли какая-то разница между удалением конструктора в поле public и private или это вопрос стиля написания кода ?


Ответы (2 шт):

Автор решения: HolyBlackCat

Какая разница между удалением в private и public ?

Никакой. Мне кажется нагляднее удалять в public.

→ Ссылка
Автор решения: Pavel Chernitsyn

Обычно, конструктор копирования и оператор присваиваивания делают приватными, чтобы объект нельзя было копировать "извне". Я так понял, этот код не ваш и вы просто хотите в нём разобраться. Скорее всего, автор кода не хотел, чтобы класс был где-то скопирован, поэтому поместил эти методы в private, а после и вовсе решил, что объект копировать нельзя (нарушает логику или что-то подобное) и удалил эти два метода. Удалять в public или в private - разницы нет.

→ Ссылка