|
|
1
25
标准容器没有虚拟析构函数,因此不能以多态方式处理它们。如果你不这样做,而每个使用你代码的人都不这样做,这本身就不是“错误的”。不过,为了清楚起见,你最好还是用作文。 |
|
|
2
16
因为你需要一个虚拟的析构函数而std容器没有它。std容器的设计不是作为基类的。 有关更多信息,请阅读文章 "Why shouldn't we inherit a class from STL classes?"
指南
|
|
|
3
6
在我看来,一个强有力的反驳是,你在强加一个接口
和
实现到您的类型上。当你发现向量内存分配策略不符合你的需求时会发生什么?你会从
|
|
4
5
这不是一个庸俗的问题,而是一个实现问题。标准容器的析构函数不是虚拟的,这意味着无法对它们使用运行时多态性来获得正确的析构函数。 我在实践中发现,用我的代码需要定义的方法(以及“parent”类的一个私有成员)创建自己的自定义列表类并没有那么痛苦。事实上,它经常导致更好的设计类。 |
|
|
5
3
除了基类需要虚拟析构函数或受保护的非虚拟析构函数之外,您还在设计中声明以下内容: 价格和费用, 与 上面例子中的双精度向量。根据你自己的断言“……随着时间的推移,费率和收费会发展出个性……”那么,费率的断言就是 还是一样的 在这一点上是双倍的向量?例如,doubles的向量不是singleton,因此如果我使用您的速率来声明小部件的doubles向量,我可能会因为您的代码而头疼。价格和收费还有什么变动吗?是否有任何基类更改与您的设计的客户端安全隔离?它们是否应该以基本方式更改? 关键是一个类是C++中许多元素来表达设计意图的元素。说出你的意思和你所说的意思是反对以这种方式使用继承权的理由。 …或者在我的回复之前更简洁地发布:替换。 |
|
|
6
3
此外,在大多数情况下,如果可能的话,您应该更喜欢组合或聚合而不是继承。 |
|
|
7
1
一个词: Substitutability |
|
|
8
1
首先,曼卡塞的优点是:
其次,说他们打电话
就我个人而言,我认为通过一个指向底部的指针来进行破坏是越界的。 可以 考虑到当前的编译器、编译器标志、程序、操作系统版本等,这只是一个“假想”的问题(据你所知),但它随时都有可能因为没有“好”的理由而崩溃。 如果您确信可以避免通过基类指针进行删除,请继续。 也就是说,关于您的评估,请注意以下几点:
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |