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);

shared_ptr reference