看过一些相关的问题,但不是这个确切的问题......
我已经将类视为适合几个主要类别,为了简单起见,让我们说这四个:
具有一些数据和一堆操作的值类。它们可以被复制并有意义地比较是否相等(通过 预期副本相等
==
)。 这些几乎总是缺少虚拟方法。其实例具有您禁用分配和复制的标识的唯一类。通常没有
operator==
这些,因为您将它们作为指针而不是对象进行比较。 这些通常有很多虚拟方法,因为不存在对象切片的风险,因为您被迫通过指针或引用传递它们。Unique-but-Clonable Classes禁用复制,但如果这是您真正想要的,则预先设计为支持克隆。 这些具有虚拟方法,最重要的是那些遵循虚拟构造/克隆习语的方法
容器类继承了它们所持有的任何东西的属性。 这些往往没有虚拟方法......例如,请参阅“为什么 STL 容器没有虚拟析构函数?” .
不管持有这种非正式的信念系统,有几次我尝试将虚拟方法添加到可复制的东西上。虽然我可能认为它“如果有效的话会很酷”,但它不可避免地会坏掉。
这让我想知道是否有人有一个具有虚拟方法且不禁用复制的类型的实际好例子?