C++ 3d.Комментарии




Свободная память


В принципе, освобождение памяти осуществляется тогда внутри деструктора (который знает размер).

Именно так. Т.е. если вы объявили деструктор некоторого класса A::~A() { // тело деструктора }

то компилятором (чаще всего) будет сгенерирован следующий код // псевдокод A::~A(A *const this, bool flag) { if (this) { // тело деструктора if (flag) delete(this, sizeof(A)); } }

Ввиду чего функция void f(Employee* ptr) { delete ptr; }

превратится в // псевдокод void f(Employee* ptr) { Employee::~Employee(ptr, true); }

и т.к. класс Employee имеет виртуальный деструктор, это в конечном итоге приведет к вызову соответствующего метода.




Содержание  Назад  Вперед