为什么 C++ 中没有默认的多态克隆运算符机制?
Why isn't there a default polymorphic cloning operator mechanism in c++?
我的意思是,克隆操作符,默认情况下使用复制构造函数和new操作符返回一个新对象。因此,如果基类中的声明是虚的,它将自动提供多态克隆机制(默认情况下任何类都不应该是虚的)
优势:
-
避免到处做
Derived * clone() const { return new Derived(*this); }
-
允许标准的智能指针(如
std::unique_ptr
或专用的可复制指针)克隆对象,而不需要它们依赖于非标准语义
风险/缺点是什么?
因为,为您需要的东西付费(如果对任何类型都是自动的,那么所有的类都将是虚拟的)。
没有什么可以阻止您将其实现为CRTP基类,因此不需要语言支持。
您可以提交添加这样一个基类的建议(以及value_ptr<T, std::default_clone<T> >
和合适的专门化:))
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 什么编译机制铸造新运算符的结果
- 为什么 C++ 中没有默认的多态克隆运算符机制?
- ISTREAM::运算符>>到字符串的精确机制