Частное наследство против сдерживания
Объясняя, когда необходимо использовать частное наследование, а не сдерживание, автор этой статьи говорит следующее:
"Нам нужно создать использованный объект до или уничтожить его после другого базового подобъекта. Если имеет значение немного более длительное время жизни объекта, нет другого способа получить его, кроме использования наследования"
Если вы хотите, чтобы подобъект A создавался до подобъекта B и разрушался после B, не будет ли достаточно объявить A перед B во включающем классе? Другими словами, почему мы не можем использовать сдерживание для достижения того же результата в этом случае?
1 ответ
Я считаю, что автор говорит о базовых подобъектах, а не о прямых подобъектах. То есть вы бы использовали частное наследование, если бы хотели, чтобы какой-то член класса был создан до того, как будут созданы другие базовые классы класса. В этом случае использование частного наследования заставит C++ инициализировать частный унаследованный базовый класс раньше других базовых классов, при условии, что вы унаследовали их в правильном порядке. Например, если вы делаете урок Derived
, хотеть Subobject
объект в Derived
и наследовать от Base
, но вы хотите Subobject
инициализируется до Base
Вы могли бы написать
class Derived: private Subobject, public Base {
}
А теперь Subobject
будет инициализирован до Base
,
(Тем не менее, это довольно глупый случай использования!)
Надеюсь это поможет!