对象似乎在构造函数之后删除自身或内存更改

时间:2012-01-04 00:51:23

标签: c++ object

我有一个游戏,为了问题而被剥离,GameHandler类,Game类和Grid类。

GameHandler类在其头文件中声明了一个Game对象。然后GameHandler构造函数重新构造Game对象,所以

 game = Game();

游戏中有一个指向其头文件中Grid对象的指针。然后构造函数定义Grid对象:

grid = new Grid(x, y, z);

然后我可以继续玩游戏直到最后(死亡或完成)。当我完成游戏时,GameHandler让我可以选择重新开始,为此我想我会简单地重置游戏状态然后调用

game = Game();

一次。这并没有抱怨,它似乎确实创建了一个新的游戏对象,反过来又创建了一个新的网格。这一次,在构建网格之后,使用VS2010并查看本地,当网格到达更新或绘图时,网格内所有变量的位置都指向0xfeeefef2或类似,这是数据根据一些搜索,在程序运行期间删除了。删除它的唯一地方是游戏的析构函数。

所以我现在的假设是我正在覆盖游戏对象,然后我覆盖的对象决定调用它的析构函数,反过来消除网格,将其留空。老实说我没有任何线索,所以任何见解都会很好。

1 个答案:

答案 0 :(得分:1)

您忘了定义复制构造函数和赋值运算符,并且您的Game之一正在销毁其析构函数中的Grid - Grid被其他Game使用因为指针被复制了。


猜测:

class Game {

   Grid* grid;

   public:
     Game(int x, int y, int z) : grid(0) {
        grid = new Grid(x, y, z);
     };

     ~Game() {
        delete grid;
     }


     /* You forgot these: */

     Game(Game const& src) : grid(0) {
        grid = new Grid(*(src.grid));
     }

     Game& operator=(Game other) {
        swap(other);
        return *this;
     }

     void swap(Game& other) {
        // swap all the members (and base subobject, if applicable) with other
        std::swap(grid, other.grid);
     }
};