copy — Почему в c ++ нет механизма по умолчанию для полиморфного клонирования?

Я имею в виду оператор клонирования, который по умолчанию использует конструктор копирования и оператор new для возврата нового объекта. Чтобы если объявление в базовом классе является виртуальным, это автоматически обеспечило бы механизм полиморфного клонирования (любой класс не должен быть виртуальным по умолчанию)

Преимущества:

  • Избегайте делать Derived * clone() const { return new Derived(*this); } везде

  • Разрешить стандартные умные указатели, такие как std::unique_ptr или выделенный копируемый объект для клонирования объекта без использования нестандартной семантики

Каков будет риск / недостаток?

3

Решение

Потому что платите за то, что вам нужно (если бы это было автоматически для любого типа, то все классы были бы виртуальными).

Ничто не мешает вам реализовать это как базовый класс CRTP, поэтому языковая поддержка не требуется.

Вы мог подать предложение, добавив такой базовый класс (вместе с value_ptr<T, std::default_clone<T> > и подходящие специализации :))

7

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