Я читал документацию std :: sub_match
и увидел, что он публично наследуется от std :: pair
. Поскольку sub_match
- это просто пара итераторов в последовательности символов с некоторыми дополнительными функциями, я могу понять, что он реализован с помощью пары
, но зачем использовать публичное наследование?
Проблема с публичным наследованием от std :: pair
такая же, как и с публичным наследованием от большинства других стандартных классов: они не предназначены для полиморфного манипулирования (в частности, они не определяют виртуальный деструктор).Другие члены также не будут работать должным образом, а именно оператор присваивания и функция-член подкачки (они не будут копировать член matched
из sub_match
).
Почему разработчики Boost, а затем комитет решили реализовать sub_match
путем публичного наследования от пары
вместо использования композиции (или частного наследования с использованием объявлений, если они хотели сохранить доступ к членам через первый
и второй
)?