компиляции, на рантайме же мы о них не знаем, только vftable/vbtable, в которых хранится некая информация о типе.
Вопрос в том, как на рантайме мы знаем сколько выделать памяти при динамической алокации, то есть, если мы создаем экземпляр через new оператор?
Мое предположение, что есть некий механизм, который просто делает sizeof и потом просто при каждом вызове конструктора у нас выделяется память нужного размера, который мы вшили в экзешник, так ли это?
Если нет, то как?
разгадка проста: выражение new T создает объект типа T, а собственно sizeof(T) известен на этапе компиляции
вот с delete base так уже не работает, поэтому существуют виртуальные деструкторы
короче, new T(args...) просто протранслирован на этапе компиляции в нечто вроде __ptr = malloc(sizeof(T)); new (__ptr) T(args...);
Ну да, типа так и есть. Этот механизм называется "компилятор"
Обсуждают сегодня