Я знаю, что они используются для получения деструктора любых подклассов (при удалении указателя). Но что происходит в фоновом режиме?Зачем нужны виртуальные деструкторы?
Я имею в виду, что подкласс наследует этот виртуальный деструктор своего базового класса. Наследовать что-то значит для меня, чтобы получить что-то такое, как оно есть. Но в этом случае подкласс не получает тот же деструктор, который имеет базовый класс. (Может быть, он получает то же самое, особенно если у него нет тела). Дело в том, что он делает другие вещи, даже если подкласс не переопределяет его. Итак, как это работает?
Допустим, мы имеем (C++):
class BaseClass{
int i;
public:
virtual ~BaseClass(){}
};
class SubClass: public BaseClass{
int j;
};
BaseClass* bptr = new SubClass;
delete bprt;
В этом случае мы хотим, чтобы программа освобождения памяти объекта потребностей типа подкласса. То есть, унаследованный int i и собственный int j. Если у нас не было виртуального деструктора в BaseClass, тогда будет использован деструктор, созданный по умолчанию в BaseClass (у него есть пустое тело, и после этого все члены BaseClass будут удалены и память освободится).
Большой вопрос: виртуальный деструктор в BaseClass будет наследоваться SubClass, но SubClass не переопределяет его. Почему унаследованный деструктор больше, чем в классе, на который он унаследован? (он удаляет как целые числа i, так и j при выполнении объекта SubClass)
Это C++? И все же классы не имеют точек с запятой в конце, но это не может быть C#, .... oh для языкового тега – doctorlove
Теперь у них есть точки с запятой;) Да, это C++ – Daniel
Я не совсем понимаю, что «Почему унаследованный деструктор больше, чем в классе, на который он унаследован? " означает – doctorlove