¿Por qué no hay un mecanismo de operador de clonación polimórfica predeterminado en c++?
copy standards (1)
Porque, pague por lo que necesita (si fuera automático para cualquier tipo, todas las clases serían virtuales).
No hay nada que le impida implementar esto como una clase base de CRTP, por lo que no se necesita soporte de idioma.
Puede presentar una propuesta agregando dicha clase base (junto con un value_ptr<T, std::default_clone<T> >
y especializaciones adecuadas :))
Quiero decir, un operador de clonación, que de forma predeterminada usa el constructor de copia y el nuevo operador para devolver un nuevo objeto. De modo que si la declaración en la clase base es virtual , automáticamente proporcionaría un mecanismo de clonación polimórfica (cualquier clase no debería ser virtual por defecto)
Ventajas:
Evite hacer
Derived * clone() const { return new Derived(*this); }
Derived * clone() const { return new Derived(*this); }
todas partesPermita que los punteros inteligentes estándar, como
std::unique_ptr
o uno copiable dedicado, clonen el objeto sin que dependan de una semántica no estándar.
¿Cuál sería el riesgo / inconveniente?