![]() |
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
首先,曼卡塞的优点是:
其次,说他们打电话
就我个人而言,我认为通过一个指向底部的指针来进行破坏是越界的。 可以 考虑到当前的编译器、编译器标志、程序、操作系统版本等,这只是一个“假想”的问题(据你所知),但它随时都有可能因为没有“好”的理由而崩溃。 如果您确信可以避免通过基类指针进行删除,请继续。 也就是说,关于您的评估,请注意以下几点:
|
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
![]() |
quantumwell · 将空向量放入std::map() 7 年前 |
![]() |
OutOfBound · 对未初始化内存使用算法的优点 7 年前 |
![]() |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 7 年前 |