我的程序在退出时崩溃。跟踪错误我得到了gWSW类的析构函数。这是问题所在:
我有一个类gShop:public gTexture。在这个类中,我声明并初始化一个指向类gWSW的对象的指针。
在gWSW中,我再次指向一个声明并初始化了类gTexture的对象。
我已经为每个类提供了正确的析构函数,并在指针上调用了delete。
程序运行正常,直到我按下ESC并调用所有的desctuctors。在这里它崩溃了gWSW的析构函数。那就是我有类似的东西:
class gShop : public gTexture
{
public:
gShop(): pWSW(new gWSW()) {}
~gShop(){delete pWSW;}
gWSW* pWSW;
};
class gWSW
{
public:
gWSW():gWSW: pTextuer(new gTexture()) {}
~gWSW(){delete pTexture;}
gTexture* pTexture;
};
class gTexture
{
public:
gTexture() {}
~gTexture();
//... a pointer to char[] here but will be also deleted in its destructor
};
崩溃前的最后一次调用是在~gWSW()中。注释“删除pTexture”会使程序退出正常而不会出现错误或崩溃。在我继续并留下评论之前,我想了解问题是什么。
答案 0 :(得分:0)
哦,我相信我找到了答案。自从我访问“堆栈”以来已经有一段时间了。我需要创建一个自己的复制构造函数,从而提供每个对象的深层副本。
这样,内存从堆分配给新指针。新内存位置的值将分配原始对象的值。
特别感谢Hans Passant建议我通过始终将复制构造函数设为私有来找到错误。