Компилятор вставляет код в начало конструктора, который инициализирует VPTR. Находится ли эта операция в зависимости от того, является ли конструктор стандартным или явно объявлен? Есть ли разница между этими двумя?Vptr с конструкторами по умолчанию против явно объявленных конструкторов
-1
A
ответ
2
Он всегда будет вставлен, он должен быть для полиморфизма, чтобы работать, по крайней мере, как это обычно делают компиляторы. Он будет инициализирован всегда, конструкторы, которые вы объявляете (или не объявляете), не имеют значения.
Или, эй, может быть, это не будет (хотя я не знаю, какие компиляторы, которые ведут себя подобным образом), все вам нужно заботиться о том, что полиморфизм работает, и всегда будет не работать, независимо от того, что конструкторы у вас есть объявлен.
Для полиморфного класса всегда будет vtable. –
Это неявное; вы ничего не можете сделать, чтобы изменить или удалить это поведение. – cdhowie
В C++ нет «vptr», а не так, как вы можете знать или заботиться. Кто даже привлек вас к мысли, что вы должны что-то сделать, а потом беспокоиться об этом? –