Luc*_*lle 10 c++ regex boost c++11
我正在阅读文档,std::sub_match<BidirectionalIterator>
并看到它公开继承自std::pair<BidirectionalIterator, BidirectionalIterator>
.由于a sub_match
只是一对迭代器变成一个字符序列,带有一些附加函数,我可以理解它是用一个实现的pair
,但为什么要使用公共继承?
公开继承的问题与std::pair<T,U>
从大多数其他标准类公开继承的问题相同:它们并不意味着以多态方式进行操作(特别是它们没有定义虚拟析构函数).其他成员也将无法正常工作,即赋值运算符和交换成员函数(它们不会复制matched
成员sub_match
).
为什么boost开发,然后委员会决定实施sub_match
由公开继承pair
,而不是使用成分(或私有继承使用声明,如果他们想继续保持成员访问过first
和second
)?
这是一个有趣的问题.据推测,他们认为这是安全的,因为没有人会动态分配一个.关于获取sub_match
对象的唯一方法是作为某些函数的返回值basic_regex
,或者作为其他函数的副本
sub_match
,所有这些都将是临时变量或局部变量.
请注意,保持sub_match
对象无论如何都是不安全的,因为它们包含迭代器,其生命周期......似乎没有在标准中指定.直到match_results
对象被重用?直到string
填充match_results
对象的函数的
操作数被破坏?要么?
我仍然避免了公共遗产.但在这种情况下,它并不像它看起来那么危险,因为你真的没有理由想要动态分配一个sub_match
.
归档时间: |
|
查看次数: |
446 次 |
最近记录: |