Есть ли какие-либо штрафы / затраты на виртуальное наследование в C ++ при вызове невиртуального базового метода?

Я верю, повторно интегрируют, на самом деле не делает этих двух операций, но вместо этого используется для слияния назад в соединительную линию от обновленного ответвления. Необходимо будет все еще сделать первый набор операций слияния/фиксации для обновления ответвления сначала.

Вот ссылка на Книга Подрывной деятельности. Возможно получить эту книгу в мертвом древовидном формате.

Из ссылки, это кажется, что использование - повторно интегрирует, обрабатывает некоторые странные случаи, вероятно, как слияние обычно делает по сравнению только с использованием прямых патчей (считайте раздел "Why Not Use Patches Instead?").

22
задан Regexident 3 May 2013 в 13:48
поделиться

1 ответ

Я думаю, что за виртуальное наследование не взимается штраф за время выполнения. Не путайте виртуальное наследование с виртуальными функциями. Обе это разные вещи.

виртуальное наследование гарантирует, что у вас есть только один подобъект A в случаях D. Так что я не думаю, что за это может быть наложен штраф .

Однако могут возникнуть случаи, когда этот подобъект не может быть известен во время компиляции, поэтому в таких случаях за виртуальное наследование может быть наложен штраф во время выполнения. Один такой случай описан Джеймсом в его ответе.

2
ответ дан 29 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: