Можно ли перегружать деструкторы?

#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:

НЕТ
Почему?
Поскольку деструктор не принимает никаких параметров, и для перегрузки любой функции у вас есть два условия:

  1. Функции должны иметь разное количество аргументов
  2. Функции должны иметь разные типы аргументов

Но поскольку у деструкторов нет никаких аргументов, мы не можем их перегружать.