为什么 C++ 中没有默认的多态克隆运算符机制?

Why isn't there a default polymorphic cloning operator mechanism in c++?

本文关键字:运算符 机制 多态 C++ 默认 为什么      更新时间:2023-10-16

我的意思是,克隆操作符,默认情况下使用复制构造函数和new操作符返回一个新对象。因此,如果基类中的声明是虚的,它将自动提供多态克隆机制(默认情况下任何类都不应该是虚的)

优势:

  • 避免到处做Derived * clone() const { return new Derived(*this); }

  • 允许标准的智能指针(如std::unique_ptr或专用的可复制指针)克隆对象,而不需要它们依赖于非标准语义

风险/缺点是什么?

因为,为您需要的东西付费(如果对任何类型都是自动的,那么所有的类都将是虚拟的)。

没有什么可以阻止您将其实现为CRTP基类,因此不需要语言支持。

可以提交添加这样一个基类的建议(以及value_ptr<T, std::default_clone<T> >和合适的专门化:))