【发布时间】:2011-12-16 14:24:18
【问题描述】:
我正在阅读std::sub_match<BidirectionalIterator> 的文档,发现它公开继承自std::pair<BidirectionalIterator, BidirectionalIterator>。既然sub_match只是一个字符序列的一对迭代器,加上一些额外的功能,我可以理解它是用pair实现的,但是为什么要使用公共继承呢?
从std::pair<T,U> 公开继承的问题与从大多数其他标准类公开继承的问题相同:它们不打算进行多态操作(特别是它们没有定义虚拟析构函数)。其他成员也将无法正常工作,即赋值运算符和交换成员函数(它们不会复制sub_match 的matched 成员)。
为什么 Boost 开发人员和委员会决定通过从 pair 公开继承而不是使用组合来实现 sub_match(或者如果他们想通过 first 和 second 保持成员访问权限,则使用声明的私有继承) )?
【问题讨论】: