Как удалить объект (класс) с помощью метода деструктора
интересно узнать, можно ли удалить объект с помощью метода деструктора?
конструктор и деструктор моего класса:
class cal
{
public:
cal()
{
days = 0;
day = 1;
month = 1;
year = 1300;
leap = true;
};
~cal()
{
delete this;
}
}*calendar = new cal;
Как удалить этот указатель через класс?
П. С.
Я забыл написать следующий код
cal *calandar = new cal[];
Я хочу использовать его в куче, а не в стеке
Я хочу использовать этот класс (объекты) часто (многие из этих объектов) представьте, сколько времени я должен написать удалить, и это затрудняет понимание, устранение неполадок и трассировку кодов я хочу, чтобы они были уничтожены автоматически (в куче)
я использовал следующий код в своем классе, когда я exec "delete [] calendar" он уменьшает занятые мои Баранов (объем ОЗУ, который используется) он работает правильно (уничтожить все объекты), выйдя из программы? Поскольку я использую GNU / Linus, и он уничтожает все объекты с или без этих строк, я беспокоюсь о утечке в windows
void DisposeObject() { delete this; }
3 ответов
Вы можете написать такой код:
class cal
{
public:
cal()
{
};
~cal()
{
}
void DisposeObject()
{
delete this;
}
}
и он будет вызывать деструктор.
вы не должны называть delete this
из вашего деструктора, так как он будет вызывать деструктор рекурсивно, возможно, приводя к переполнению стека. Во всяком случае, код, который вы написали, страдает от неопределенное поведение.
см. этот вопрос для углубленного обсуждения:удалить это разрешено?
нет. К моменту вызова деструктора объект уже уничтожается, так что delete this
недопустимо.
поведение не определено, но, скорее всего, он вызовет деструктор рекурсивно, что приведет к переполнению стека.
интересно узнать, можно ли удалить объект с помощью метода деструктора
даже если предположить, что это действительно так - проблема в том, что ничего никогда вызов деструктор, так что это не будет иметь никакого эффекта. Деструктор вызывается, когда вызывающий код удаляет объект, который, в свою очередь, может удалить любые внутренние объекты по мере необходимости.
в вашем случае не похоже, что вам нужно что-то делать в вашем деструкторе, однако, поскольку у вас нет выделяемых ресурсов, которые необходимо явно удалить (по крайней мере, в том, что вы показываете).