如何通过析构函数方法删除对象(类)

How to delete an object (class) through destructor method

本文关键字:对象 删除 何通过 析构函数 方法      更新时间:2023-10-16

我想知道是否可以通过析构函数方法删除对象?

我的类的构造函数和析构函数:

class cal
{
    public:
        cal()
        {
            days = 0;
            day = 1;
            month = 1;
            year = 1300;
            leap = true;
        };
        ~cal()
        {
            delete this;
        }
}*calendar = new cal;

如何通过类删除此指针?

p.S

我忘了写以下代码

cal *calandar = new cal[];

我想在堆中使用它,而不是堆叠

我想经常使用这个类(对象)(很多对象)想象一下我应该写多少次删除,这会让我很难理解、排除故障和跟踪代码。我希望它们自动销毁(堆中)

当我执行"delete[]calendar"时,我在类中使用了以下代码,它减少了我的内存占用(使用的内存量)。它是否通过退出程序正常工作(销毁所有对象)?因为我使用GNU/Linus,它会破坏所有有或没有这行的对象,我担心在windows 中泄漏

void DisposeObject() { delete this; }

否。在调用析构函数时,对象已经被销毁,因此delete this无效。

行为是未定义的,但很可能会递归调用析构函数,导致堆栈溢出。

您可以这样编写代码:

class cal
{
    public:
        cal()
        {
        };
        ~cal()
        {
        }
        void DisposeObject()
        {
           delete this;
        }
}

它会调用你的析构函数。

您不应该从析构函数中调用delete this,因为它会递归地调用析构函数,可能会导致堆栈溢出。无论如何,您编写的代码都存在未定义的行为

请参阅此问题进行深入讨论:是否允许删除此项?

我想知道是否可以通过析构函数方法删除对象

即使假设这是有效的-问题是,没有什么会调用析构函数,所以这永远不会有效果。当调用代码删除对象时,会调用析构函数,而对象又可以根据需要删除任何内部对象。

然而,在您的情况下,您似乎不需要在析构函数中做任何事情,因为您没有任何需要明确删除的资源(至少在您显示的内容中)。