c++ – 标准容器可以继承吗

C++ 标准提供了不少容器类,这些为C++的应用提供了很大的便利。但是,总有些时候这些标准容器提供的功能不能完全满足需求,于是就有人从标准容器上继承出了自己的类。
那么,标准容器可以用作基类吗?
先说结论吧,不推荐,不要用

为什么呢?
标准中所用的容器类都没有虚的析构函数
没有虚析构就意味着这些类并不准备被用于继承。因为当基类没有虚析构的时候,子类的对象有可能不能被正确的析构。比如说,将子类的指针转换为基类的指针,在对基类指针调用 delete 的时候,如果基类的析构函数不是虚的,那么子类的析构函数将不会被调用。这是不推荐将标准容器作为基类的最主要的原因。

可是我真的想扩充标准容器的功能啊?
两个方案:
1. 对于基于标准容器的算法,可以不基于某一种容器扩展,而是写成接受 iterator 的算法。
这个在 <algorithm> 里有不少例子,可以参考。(其实,看看 <algorithm> 你可能就已经发现你想扩充的算法了)简单的增加一个算法都可以使用这种方案。
基于 iterator 的算法具有通用性,可以不只应用与某一个容器,复用性好,何乐而不为呢。
2. 将标准容器作为类成员。
如果你的类需要一些额外的数据成员,那这就是一个比较好的方案了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值