Как удалить объект (класс) с помощью метода деструктора

интересно узнать, можно ли удалить объект с помощью метода деструктора?

конструктор и деструктор моего класса:

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 недопустимо.

поведение не определено, но, скорее всего, он вызовет деструктор рекурсивно, что приведет к переполнению стека.


интересно узнать, можно ли удалить объект с помощью метода деструктора

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

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