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

时间:2012-07-12 16:16:11

标签: c++ class destructor

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

我班级的构造函数和析构函数:

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[];

我想在堆中使用它而不是堆栈

我想经常使用这个类(对象)(很多那个对象)想象我应该写多少时间删除它,这使我难以理解,故障排除和跟踪代码我希望它们被自动销毁(在堆中)

当我执行“删除[]日历”时,我在我的班级中使用了以下代码它减少了我的rams占用(使用的ram数量)它是否通过退出程序正常工作(销毁所有对象)?因为我使用GNU / Linus并且使用或不使用那些行来破坏所有对象我担心在windows中泄漏

void DisposeObject() { delete this; }

3 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:10)

您可以编写如下代码:

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

它会调用你的析构函数。

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

请参阅此问题以进行深入讨论:Is delete this allowed?

答案 2 :(得分:3)

  

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

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

在您的情况下,看起来您不需要在析构函数中执行任何操作,因为您没有任何需要明确删除的资源(至少在您显示的内容中)