0

我的程序在退出时崩溃。追溯错误,我找到了 gWSW 类的析构函数。这是问题所在:

我有一个 gShop 类:public gTexture。在这个类中,我声明并初始化了一个指向 gWSW 类对象的指针。

在 gWSW 中,我再次有一个指向声明和初始化类 gTexture 的对象的指针。

我已经通过在指针上调用 delete 为每个类提供了适当的析构函数。

该程序运行良好,直到我按 ESC 并调用所有描述符。在这里,它在 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() 中。注释掉“delete pTexture”会使程序退出正常而不会出现错误或崩溃。在我继续并留下评论之前,我想了解问题所在。

4

1 回答 1

0

哦,我相信我找到了答案。自从我访问“堆栈”以来已经有一段时间了。我需要创建一个自己的复制构造函数,从而提供每个对象的深层副本。

以这种方式,内存从堆分配给一个新的指针。新内存位置的值被分配来自原始对象的值。

特别感谢 Hans Passant,他建议我通过始终将复制构造函数设为私有来找到错误。

于 2013-10-12T02:54:45.187 回答