1

タイル ポインターの 2D ベクトルがあります。別のマップをロードするたびに、ベクター内のすべてのタイルを削除してメモリを解放し、別のタイルで再充填したいと考えています。

std::vector<std::vector<Tile*>> map;

ここに私のタイルクラスがあります:

#ifndef _TILE_H
#define _TILE_H

#include <SFML\Graphics.hpp>

class Tile
{

public:
    int type;
    int color;
    int light_level;
    int loc_x, loc_y;

    Tile();
    ~Tile();

    sf::Sprite baseSprite;

    void Draw(int x, int y, sf::RenderWindow* rw);

    void setTexture(sf::Texture& texture);
};

#endif

次のようにベクトルを埋めます。

map[x][y] = tile;

問題は、ベクトルをタイルで補充するたびに、ゲームがクラッシュするまでメモリがいっぱいになり続けることです。私の質問は、メモリが解放されるように、ベクトルからすべてを適切に削除するにはどうすればよいですか?

メモリを解放しなかったタイルを削除する試みは次のとおりです。

for(int ii = 0; ii < this->map.size(); ii++){
    for(int jj = 0; jj < this->h; jj++){

        delete &this->map[ii][jj]->baseSprite;
        delete &this->map[ii][jj]->color;
        delete &this->map[ii][jj]->light_level;
        delete &this->map[ii][jj]->loc_x;
        delete &this->map[ii][jj]->loc_y;
        delete &this->map[ii][jj]->type;

        delete &this->map[ii][jj];
    }
}


map.clear() 

追加のコードが必要な場合は、お知らせください。

4

1 に答える 1