00:00 продолжение про abstract class and pure virtual functions 8:47 dynamic cast 16:00 про RTTI 20:20 оператор typeid 27:30 ещё важное про dynamic cast 34:02 примеры когда static cast, reinterpret cast and dynamic cast дают разный результат 36:15 5.5 memory layout of polymorphic object 38:05 ABI (Application Binary Interface)
@Goodman-tz5ms9 ай бұрын
Чистая доска, кайфанул)
@nicholasspezza94499 ай бұрын
Оказывается эти губки не стирают маркеры, а просто размазывают их тонким слоем по доске. Получается доску потом нужно нормальной тряпкой мыть.
@КонстантинКрасильников-ю5гАй бұрын
А как dynamic_cast знает насколько сдвигать поинтер? Вы говорите что все оффсеты известны во время компиляции, однако тип объекта определяется во время исполнения, но в свою очередь оффсет зависит от типа объекта.
@mesyarikАй бұрын
@@КонстантинКрасильников-ю5г dynamic_cast в рантайме смотрит, какой это тип, и зная тип переменной и настоящий тип, в рантайме понимает как сдвинуть
@КонстантинКрасильников-ю5гАй бұрын
@mesyarik то есть нужно дополнительно хранить все возможные оффсеты для приведения между типами и из них выбирать подходящий?
@mesyarikАй бұрын
@@КонстантинКрасильников-ю5г кажется, достаточно хранить в таблице оффсет от начала объекта, а также для каждого типа помнить, с каких оффсетов начинаются все подобъекты в нем
@astr0gamingchannel37415 күн бұрын
Ну оффсеты и правда должны быть известны, мне кажется. Мы же, когда определяем класс, явно определяем его структуру в памяти, думаю компилятор сможет вычислить оффсеты до родительских классов. Могу ошибаться)
@КириллЧе-я5ы Жыл бұрын
То есть динамик каст нужен в принципе, если нет реализации определённого поведения в том классе, от которого кастуешь, с целью воспользоваться этим поведением после каста?.. и вообще если пользуешься этим кастом, в программе что-то не так?.. и стоит пересмотреть архитектуру…
@vladimirsemenchik2193 Жыл бұрын
47-я минута. На этапе компиляции нет ни каких адресов. Компилятор не работает с адресами. Все адреса появляются только на этапе линковки.
@mesyarik Жыл бұрын
Это правда, и я об этом даже делаю оговорку на 47:03 :) Но для упрощения, говоря "компилятор", люди (и я в том числе) часто имеют в виду весь конвейер g++ (препроцессор->компилятор->ассемблер->линковщик). Ясно, что настоящий компилятор делает не всё из сказанного, но для понимания на данном уровне это не имеет значения.
@nicholasspezza94499 ай бұрын
Подтверждаю, лектор об этом сказал, поэтому ваша ремарка беспочвенна.