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

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

Ответ 1

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

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

class Foo {
  ~Foo() { ... }
public:
  DestroyFoo(int) { ... };
  DestroyFoo(std::string) { ... }
};

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Нет. Вы не можете иметь 2 деструктора в одном классе.

Что вы пытаетесь выполнить?

Ответ 6

Вы не перегружаете деструктор, потому что вы его никогда не называете. Это основной смысл. (Из того, что мы перешли в классе.)