为了尝试替换单例模式和通用的“资源管理器”,我提出了一个解决方案。使资源静态和受保护。该资源在继承类的所有子级之间共享。它有效,但我不确定这是否是一个好方法。这里有一些代码来表达我在做什么(这里的资源是 sf::Texture):
class Foo {
public:
Foo() {
if(m_texture == nullptr) {
//Création et chargement de la texture
m_texture = std::unique_ptr<sf::Texture>(new sf::Texture());
m_texture->loadFromFile("...");
}
}
void draw(sf::RenderWindow& window) = 0;
protected:
static std::unique_ptr<sf::Texture> m_texture = nullptr;
};
class Bar : public Foo {
public:
Bar()
: m_sprite(*m_texture) {}
void draw(sf::RenderWindow& window) {
window.draw(m_sprite);
}
private:
sf::Sprite m_sprite;
};
这样我的资源就会被所有的孩子共享,并且只被初始化一次。替换我将通过引用随处携带的单例或资源管理器是否是一个好的解决方案。谢谢!