我很想知道是否可以通过析构函数方法删除对象?
我班级的构造函数和析构函数:
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; }
答案 0 :(得分:14)
没有。在调用析构函数时,对象已被销毁,因此delete this
无效。
行为未定义,但很可能会递归调用析构函数,导致堆栈溢出。
答案 1 :(得分:10)
您可以编写如下代码:
class cal
{
public:
cal()
{
};
~cal()
{
}
void DisposeObject()
{
delete this;
}
}
它会调用你的析构函数。
你不应该从析构函数中调用delete this
,因为它将递归调用析构函数,可能导致堆栈溢出。无论如何,您编写的代码都存在未定义的行为。
请参阅此问题以进行深入讨论:Is delete this allowed?
答案 2 :(得分:3)
我很想知道是否可以通过析构函数方法删除对象
即使假设这是有效的 - 问题是没有任何东西会调用析构函数,所以这永远不会有效果。当调用代码删除对象时,将调用析构函数,而对象又可以根据需要删除任何内部对象。
在您的情况下,看起来您不需要在析构函数中执行任何操作,因为您没有任何需要明确删除的资源(至少在您显示的内容中)