Таблицы виртуальных функций: полиморфизм в С++ под капотом

Поділитися
Вставка
  • Опубліковано 18 гру 2024

КОМЕНТАРІ • 31

  • @fisyamaloy1754
    @fisyamaloy1754 2 роки тому +2

    Про дивертуализацию у компилятора тоже можно упомянуть. В некоторых случаях, даже когда мы пытаемся вызвать вирутальную функцию, скачка в таблицу виртуальных функций не будет в рантайме, вызовется как обычная

    • @vladimir_balun_programming
      @vladimir_balun_programming  2 роки тому +1

      Согласен, видео снято давно - про это тогда не знал

  • @nicholasspezza9449
    @nicholasspezza9449 8 місяців тому

    Почему скобки не по код-стайлу? В яндексе код-стайл, чтоб открывающая скобка была на одной строке с сигнатурой функции

  • @yanparasyuk8782
    @yanparasyuk8782 3 роки тому +3

    Где Вы получал свои знания ? Что за книги или сайты которые так подробно объясняют. Спасибо большое за видео, жду новые!

    • @vladimir_balun_programming
      @vladimir_balun_programming  3 роки тому +5

      Много читал, много смотрел видео, много практиковался. Потом, когда все это объединяется - получается очень интересная картинка в голове)

    • @Ланс-м1в
      @Ланс-м1в 3 роки тому +1

      Найдите pdf "Multiple inheritance for C++" Bjarne Straustrup. В google одно из первых выдает документ. При начальном знании языка, посидеть два вечера с переводчиком в свободное время.

    • @Ланс-м1в
      @Ланс-м1в 3 роки тому +1

      Или статью "Multiple inheritance considered useful". Не помню автора.

    • @vladimir_balun_programming
      @vladimir_balun_programming  3 роки тому

      @@Ланс-м1в спасибо, отличный материал, раньше не встречал

    • @Ланс-м1в
      @Ланс-м1в 3 роки тому +1

      Спасибо за видео. Повторить было полезно. Очень много времени в свое время потратил, чтобы найти информацию.

  • @holaamigogringoz
    @holaamigogringoz 2 роки тому +1

    Владимир, я ничего не понял, но ты крут!

  • @daps9516
    @daps9516 Рік тому

    Понял 90%

  • @ShadowFiend-zg4fe
    @ShadowFiend-zg4fe 2 роки тому +6

    Да ладно ? Прям в стандарте написано про очередность функций в vtable ? Стандарт вообще про vtable ничего не знает, это детали имплементации. То что clang gcc msvc это так имплементирует, не означает что нельзя по другому. Например можно хранить vtable прям в объекте, чтобы не делать дереференс на каждый виртул колл, теряя perfomance, более того в некоторых старых компляторах есть такая имплементация, и это соответсвтует стандарту. Стыдно учить тому, в чём сам не разбираешься !
    Еще и про UB что то заикнулся. У стандарта нет ABI(Application Binary Interface), он для разных архитектур пишется.

    • @Sergey-mq3ol
      @Sergey-mq3ol 2 роки тому

      Душнила
      Что ты тут делаешь если все знаешь

    • @ShadowFiend-zg4fe
      @ShadowFiend-zg4fe 2 роки тому +3

      @@Sergey-mq3ol В рекомендациях мусор этот вылез. Тебе в фронтенд, а не в плюсы если для тебя душно это.
      Если данный персонаж берётся за обучение других людей, то пусть хоть немного разберётся в теме.

    • @Sergey-mq3ol
      @Sergey-mq3ol 2 роки тому

      @@ShadowFiend-zg4fe Лан, согласен, что чел не топ, извиняюсь, ты прав что обоссал его

    • @princessmary5556
      @princessmary5556 11 місяців тому +1

      Вы пишете: *можно хранить vtable прям в объекте, чтобы не делать дереференс на каждый виртул колл, теряя perfomance* Это чушь.

  • @Kalin_cheetah
    @Kalin_cheetah Рік тому

    А как устроена сама vfptr? Это указатель ведет к таблице. А таблица сама это что, объект какого-то системного класса?

    • @rafk5341
      @rafk5341 4 місяці тому

      Массив указателей на функции + ртти инфа про класс
      u64** vftable;
      Вызвать функцию из таблицы можно вот так:
      void(*fn)(void*) = reinterpret_cast(vftable[0]);
      fn(this);
      На эту тему есть пару лекций у Ильи Мещерина, там доходчиво все объясняется

  • @ОлегСамохин-ъ9о
    @ОлегСамохин-ъ9о 3 роки тому

    "как яд на всех потомков", на всех непосредственных потомков? или на прямых тоже?)

    • @vladimir_balun_programming
      @vladimir_balun_programming  3 роки тому

      Что имеется в виду под прямыми и непосредственными?

    • @ОлегСамохин-ъ9о
      @ОлегСамохин-ъ9о 3 роки тому

      @@vladimir_balun_programming , имею ввиду ТОЛЬКО на первых, в которых не используется слово virtual, или все таки на тех кто отнаследуется от первых потомков(без слова virtual у метода) тоже?

    • @ОлегСамохин-ъ9о
      @ОлегСамохин-ъ9о 3 роки тому

      @@vladimir_balun_programming а терминологию "непосредственные" и "прямые" взял от начальников.
      Условно: Непосредственный - тот кому я отчитываюсь, показываю результат работы
      Прямой - начальник начальника, глава отдела

    • @ТоляПечкин-в7в
      @ТоляПечкин-в7в 2 роки тому

      на всех-всех

    • @nicholasspezza9449
      @nicholasspezza9449 8 місяців тому

      можно даже через потомков перепрыгивать, если в каком-то такой функции нет, а в следующем есть, то она будет виртуальной.

  • @ОтважныйНУБ
    @ОтважныйНУБ 3 роки тому +3

    В идеале конечно бы с дебагингом объяснять, а то уже под конец запутался )

  • @Ultath
    @Ultath 10 місяців тому

    Объясняющему бы научиться слушать. Ни разу не дали человеку сформулировать вопрос. У Вас цель - научить или своими знаниями блеснуть?)) Как только ключевые слова слышите,, сразу перебиваете очередной попыткой рассказать, довольно сбивчивой, как будто боитесь, что вопрос окажется о том, чего Вы не знаете.