Как перегрузить деструктор?
Как перегрузить деструктор?
Ответ 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
Вы не перегружаете деструктор, потому что вы его никогда не называете. Это основной смысл. (Из того, что мы перешли в классе.)