Что наиболее эффективно: использование нулевого объекта или ветвления в nullptr.
Предполагая, что данное кодовое решение будет зависеть от вашей цели. И, если вы этого не предполагаете, это также будет зависеть от вашего кода, компилятора и, возможно, фазы луны.
Повлияет ли замена обратного вызова на указатель на абстрактный базовый класс?
В большинстве случаев это также будет динамическая диспетчеризация.
Как насчет вероятности того, что для обратного вызова установлено значение, отличное от nullptr. Я думаю, что если обратный вызов, скорее всего, nullptr, то он быстрее с дополнительной ветвью, верно?
Это будет зависеть от соотношения, а также от аппаратного обеспечения (является ли ветвь быстрее или не сравниваетсяк косвенному вызову функции, который также зависит от соотношения).
Просто чтобы вы знали, насколько тонки вещи: давайте предположим, что вы говорите о современных процессорах для настольных ПК x86_64, при этом вызов не является встроенными с вероятностью 99% времени nullptr
. Люди сказали вам измерять.
Итак, вы сделали, и, в этом случае, давайте предположим, что вы обнаружили, что ветка кажется быстрее. Большой! Таким образом, мы должны начать использовать ветки везде, верно?
Не совсем, потому что ваш предиктор ветвления, вероятно, сделал код фактически свободным (ветвление никогда не выполнялось), что означает, что вы даже не сравнивали ветки с косвенными вызовами ввсе.