gpt4 book ai didi

c++ - 为什么 std::sub_match 公开继承自 std::pair

转载 作者:可可西里 更新时间:2023-11-01 16:36:33 24 4
gpt4 key购买 nike

我正在阅读 std::sub_match<BidirectionalIterator> 的文档并看到它公开继承自 std::pair<BidirectionalIterator, BidirectionalIterator> .自sub_match只是一对迭代器变成了一个字符序列,加上一些额外的功能,我可以理解它是用一个pair实现的,但为什么要使用公共(public)继承呢?

std::pair<T,U>公开继承的问题与从大多数其他标准类公开继承相同:它们并不意味着要进行多态操作(特别是它们没有定义虚拟析构函数)。其他成员也将无法正常工作,即赋值运算符和交换成员函数(它们不会复制 matchedsub_match 成员)。

为什么 Boost 开发人员和委员会决定实现 sub_match通过公开继承 pair而不是使用组合(如果他们想通过 firstsecond 保持成员访问权限,则使用声明的私有(private)继承)?

最佳答案

这是一个有趣的问题。据推测,他们认为它是安全的因为无论如何都没有人会动态分配一个。有关获得 sub_match 对象的唯一方法是作为返回值来自 basic_regex 的一些函数,或者作为其他函数的拷贝sub_match,所有这些都将是临时的或本地的变量。

请注意,无论如何都保留 sub_match 对象是不安全的,因为它们包含迭代器,其生命周期...似乎未在中指定标准。直到 match_results 对象被重用?直到string 操作数到填充 match_results 的函数对象被破坏?或者?

我仍然会避免公共(public)继承。但在这种情况下,它是并不像看起来那么危险,因为你真的没有理由曾经想动态分配一个 sub_match

关于c++ - 为什么 std::sub_match<T> 公开继承自 std::pair<T, T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com