SDL - 使用带SDL_Texture的std :: vector不起作用,Array工作正常

时间:2017-03-06 19:33:23

标签: c++ arrays vector sdl

示例:

class DefaultTexture
{
public:
    bool loadFromFile(std::string path);
    void render(int x, int y);
protected:
SDL_Texture* mTexture; 
};

main:(...)
DefaultTexture mCards[2];
DefaultTexture X;
X.loadFromFile("Data/basic_card.png");
DefaultTexture Y;
Y.loadFromFile("Data/basic_card.png");
mCards[0] = X;
mCards[1] = Y;
mCards[0].render();mCards[1].render();

工作正常(我可以看到两张图片)如果我使用std :: vector而只能看到第一张。

std::vector<DefaultTexture> mGG;
DefaultTexture X;
X.loadFromFile("Data/basic_card.png");
DefaultTexture Y;
Y.loadFromFile("Data/basic_card.png");
mGG.push_back(X); mGG.push_back(Y);
mGG[0].render(); mGG[1].render();

任何人都可以向我解释为什么它不起作用? (无论如果我使用2或100,我只能看到第一个)

1 个答案:

答案 0 :(得分:0)

第一个使用=运算符。第二个使用copy-constructor。

可能的解决方案是避免复制。你可以使用指针:)

#include <memory>

//...

std::vector<std::shared_ptr<DefaultTexture>> mGG;

std::shared_ptr<DefaultTexture> X(new DefaultTexture);
std::shared_ptr<DefaultTexture> Y(new DefaultTexture);
X->loadFromFile("Data/basic_card.png");
Y->loadFromFile("Data/basic_card.png");

mGG.push_back(X);
mGG.push_back(Y);

shared_ptr reference