当传递给一个对象时,SDL_Surface会将一个图像的新实例存储在内存中,还是指向传递给它的图像?

问题描述:

敌对阶级从Object类继承和使用Object类的构造函数来加载图像...当传递给一个对象时,SDL_Surface会将一个图像的新实例存储在内存中,还是指向传递给它的图像?

Object::Object(SDL_Surface *imageFile,int x, int y, int w, int h) 
{ 
    image = imageFile; 
} 

因为我想要的水平类来处理装入和取出的图像,我已经离开了析构函数空为对象都和敌对阶级...

水平类初始化SDL_Surface敌人图像和图像加载到它...

class Level : public StateManager 
{ 
    private: 
    SDL_Surface *enemyImage; 
}  
Level::Level(int levelNo) 
{ 
    enemyImage = loadImage("image/enemy.png"); 
} 

然后,在水平更新功能,敌人像已经过去了d当其推到敌人矢量敌方目标......

enemy.push_back(Enemy(enemyImage, 640, 200, 32, 32)); 

所以,我的问题是,如果当从级别对象加载的图像传递给敌方目标,是它创造的一个新实例它在内存中,还是它指向在关卡中加载的那个?

您正在做的只是将指针复制到SDL_Surface对象;对象本身以及由此的图像数据不被再现。你应该小心共享资源的管理。特别是,您应确保您只为每个加载的SDL_Surface拨打SDL_FreeSurface()一次。

+0

这就是我想要这样做的主要原因......当我让敌人班级管理自己的图像时,游戏会在被摧毁时发生分段错误。我提出了解决方案,让level级别管理图像,以便SDL_FreeSurface只在级别结束时调用一次。感谢您的信息。 – user1122136

+0

@ user1122136:你总是可以使用'std :: shared_ptr '与一个调用'SDL_FreeSurface()'的删除器。智能指针('shared_ptr','unique_ptr'等)通常比现代C++中的原始指针更可取,除非您有其他特定的原因。 –