0

虚惊!(阅读编辑)

我正在尝试使用 SDL 制作一个小游戏。创建实体时,它的图像应该增加引用计数,这没问题。问题出现在使用“SDL_FreeSurface(image)”(减少它)的时候,这应该发生在实体本身内,所以我试图创建自己的析构函数,作为测试它是否被调用我添加了一个 cout,但由于某种原因它被称为每个刻度?它没有删除任何东西,所以我想当我让它工作时我还必须处理所有实体值(以为我只需要处理特殊情况,比如这个)。

Entity::~Entity()
{
    cout << "I'm deleted" << endl;
    //SDL_FreeSurface(image);
}

如果应该一直调用析构函数(?)为什么会这样?

编辑我刚刚意识到,在每个滴答声中,我都使用了一些临时实体,可能是那些被解构的实体,抱歉,请随意锁定它。

4

1 回答 1

4

每次销毁类 Entity 的对象时,都会调用您的析构函数,然后才会调用。

如果您的析构函数在每个滴答声中被调用,这意味着一个对象在每个滴答声中都被销毁。很可能您在每次滴答时都创建了一个临时 Entity 对象,它会立即被销毁(例如,您可能正在按值传递一个 Entity 对象)。

于 2013-01-17T12:11:25.907 回答