c++ - 我的析构函数每次都被调用

标签 c++ sdl destructor

<分区>

误报! (阅读编辑)

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

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

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

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

最佳答案

每次销毁 Entity 类的对象时都会调用您的析构函数,并且仅在那时调用。

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

关于c++ - 我的析构函数每次都被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14378717/

相关文章:

c++ - 柔软、透明的笔画纹理没有像我预期的那样混合

c++ - 使用已删除的函数错误

c++ - 如何像 OpenGL 中的 glRotatef() 一样旋转顶点?

c++ - SDL:在另一个纹理之上渲染纹理

c++ - 如何用 C++ 编写一个简单的类?

python - Python 中的自定义析构函数

c++ - 如何在 Visual Studio C++ 2010 中将 BSTR 转换为 std::string?

c - 对 `SDL_Init' 的 undefined reference ,将 SDL 链接到程序

c - 如何正确使用 SDL_PeepEvents?

C++:临时参数的生命周期?