#c #syntax #destructor #overloading
#c #синтаксис #деструктор #перегрузка
Вопрос:
enable_if страница документа гласит:
Конструкторы и деструкторы не имеют возвращаемого типа; дополнительный аргумент является единственным вариантом.
Можно ли перегружать деструкторы?
Комментарии:
1. 1 хорошее наблюдение. Хотя ответ «нет».
Ответ №1:
Ответ №2:
Можно ли перегружать деструкторы?
Ответ прост: Нет.
Две версии desturctor не могут сосуществовать в class
теле.
Однако, в отличие от распространенного мнения, обратите внимание, что деструктор имеет синтаксис 2.
struct E {
~E(); // syntax-1
~E() throw(); // syntax-2
};
Синтаксис-2 менее популярен. Но это обязательно, если деструктор базового класса содержит аналогичный синтаксис. Лучшим примером является наследование std::exception
.
Обратите внимание, что несоблюдение такого синтаксиса приводит к:
ошибка: более слабый спецификатор броска для ‘virtual E::~ E()’
Ответ №3:
НЕТ
Почему?
Поскольку деструктор не принимает никаких параметров, и для перегрузки любой функции у вас есть два условия:
- Функции должны иметь разное количество аргументов
- Функции должны иметь разные типы аргументов
Но поскольку у деструкторов нет никаких аргументов, мы не можем их перегружать.