![Smile :)](./images/smilies/icon_smile.gif)
Интересно, как логически объяснить этот феномен. Я так понимаю, таблица виртуальных функций заполняется после отработки конструктора. Но зачем так сделано?
Code: Select all
class А
{
public:
A();
virtual void function();
};
class B: public A
{
public:
B();
virtual void function();
};
Angry wrote: Я так понимаю, таблица виртуальных функций заполняется после отработки конструктора. Но зачем так сделано?
shadow7256 wrote:Нормальная практика. А как вызывать методы у еще не до конца достроенного объекта?
Мало ли что эти методы делают с членами класса (которых еще нет и в помине может быть) и от чего завивисит поведение внутри метода
Angry wrote:Я включаю в конструктор виртуальные функции, что бы в будущем через перегрузку этих функций решить эту проблему.
ig wrote:Потому что класс ещё не достроен.
Смотрите link
Angry wrote: Я же говорю, что это я понял.
Но кто-то может пояснить, почему так? Почему класс не достраивается до окончания работы конструктора? Чем это лучше, если бы все выделения памяти и заполнения VFT завершались до выполнения кода внутри конструктора?
Angry wrote:Но кто-то может пояснить, почему так? Почему класс не достраивается до окончания работы конструктора? Чем это лучше, если бы все выделения памяти и заполнения VFT завершались до выполнения кода внутри конструктора?
Angry wrote:Как-то наткнулся на неприятную особенность с++ (воистину, неисчерпаемый язык!) - невозможность использования виртуальных функций в конструкторе.
Angry wrote: Интересно, как логически объяснить этот феномен.