есть место в коде, когда указатель на class A : public B, public C передаётся как void*, а потом его надо использовать только как С*, как всё это правильно закастить? чем будет отличаться поведение void* c = static_cast(ptrA) и void* c = dynamic_cast(ptr A). При этом интересны разные вариации на тему виртуальности методов. В моём случае C вообще был просто интерфейсом
Спасибо, интересное видео. Это получается что если такой порядок наследования: class C: public A, public B, то в памяти ABC, а если: class C: public B, public A, то в памяти BAC ? Еще интересно посмотреть видео про конструкторы (аллокаторы).
я бы назвал "thunk" - "подразумеваем", "имеем в виду"
передаем класс C, но подразумеваем A.
Спасибо за видео!
есть место в коде, когда указатель на class A : public B, public C передаётся как void*, а потом его надо использовать только как С*, как всё это правильно закастить? чем будет отличаться поведение void* c = static_cast(ptrA) и void* c = dynamic_cast(ptr A). При этом интересны разные вариации на тему виртуальности методов. В моём случае C вообще был просто интерфейсом
Спасибо за ваши видео! Для меня осталось непонятно, что происходит с указателем на таблицу виртуальных функций.
Спасибо, интересное видео. Это получается что если такой порядок наследования:
class C: public A, public B, то в памяти ABC, а если:
class C: public B, public A, то в памяти BAC ?
Еще интересно посмотреть видео про конструкторы (аллокаторы).
компилятор расставляет порядок ABC или BAC и сам же создаёт thunk, зачем нам об этом задумываться, вручную указатели мы двигать не будем всё равно
у вас там слева шторы что ли красные ?
ua-cam.com/video/VfpvKrtD7zo/v-deo.html
все ясно. от красноватой стены свет отражается