Как перегрузить деструктор?

Это, вероятно, ОС и, возможно, зависит от браузера, но в Windows тип MIME для данного расширения файла можно найти, посмотрев в реестре под HKCR:

Например:

HKEY_CLASSES_ROOT.zip - ContentType

Чтобы перейти от MIME к расширению файла, вы можете посмотреть ключи в разделе

HKEY_CLASSES_ROOT \ Mime \ Database \ Content Type

] Чтобы получить расширение по умолчанию для определенного типа MIME.

13
задан Joshua 12 June 2009 в 20:39
поделиться

5 ответов

Вы не можете. В C ++ есть только один деструктор на класс.

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

class Foo {
  ~Foo() { ... }
public:
  DestroyFoo(int) { ... };
  DestroyFoo(std::string) { ... }
};
34
ответ дан 1 December 2019 в 18:13
поделиться

Интересный вопрос, но единственная причина, по которой вы захотите перегрузить деструктор, заключается в том, что вы хотите освободить какой-то ресурс в одном деструкторе и оставить его в другом, верно?

По сути, вы можете добиться такого поведения из своего собственного деструктора, используя дополнительное логическое значение, которое сообщит вам, следует ли освобождать конкретный ресурс или нет. Это логическое значение будет установлено в вашем конструкторе и / или в одном из ваших других методов, и в вашем деструкторе вы проверяете, установлен ли он. Если он не установлен, вы освободите ресурс. В противном случае вы просто покинете ресурс и, вероятно, его освободит какая-то другая задача. (Это имеет смысл, когда вы разделяете ресурсы между несколькими объектами.)

Причина, по которой вы не можете перегрузить деструктор, заключается в том, что ваш код не будет Я не знаю, какой деструктор нужно вызывать при уничтожении объекта. Если вы плохо называете деструкторы, но тогда вы плохо себя ведете! ; -)

4
ответ дан 1 December 2019 в 18:13
поделиться

Вы не можете! У каждого класса может быть только один деструктор. Как у вас могло быть больше одного? Деструктор запускается автоматически; язык никак не знает, какой из них вызывать.

Однако виртуальные деструкторы - это другое дело.

1
ответ дан 1 December 2019 в 18:13
поделиться

Перегрузка означает наличие нескольких функций с одним и тем же именем, которые принимают разные аргументы. Подобно swap (int & a, int & b) и swap (double & a, double & b) . Деструктор не принимает аргументов. Перегрузка не имеет смысла.

Если вам нужно делать разные вещи при уничтожении объекта в зависимости от определенных обстоятельств, вам просто нужны соответствующие операторы if в вашем деструкторе, чтобы проверить эти обстоятельства.

3
ответ дан 1 December 2019 в 18:13
поделиться

Не знаете. В одном классе не может быть двух деструкторов.

Чего вы пытаетесь достичь?

0
ответ дан 1 December 2019 в 18:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: