SDL - 使用带有 SDL_Texture 的 std::vector 不起作用,Array 工作正常
SDL - Using a std::vector with SDL_Texture does not work, Array works fine
示例:
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个,我只能看到第一个)
第一个使用=运算符。第二个使用复制构造函数。
一个可能的解决方案是避免复制。你可以使用指针 :)
#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);
示例:
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个,我只能看到第一个)
第一个使用=运算符。第二个使用复制构造函数。
一个可能的解决方案是避免复制。你可以使用指针 :)
#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);