Panelというクラスと
Mineというクラスを持ち、
両方を管理するBoardクラスがあります。
持ち方としてはPanelは2次元vector、Mineは1次元vectorです。
Panel(正方形)もMineもゲームのたびに数を変化させたいからです。
というわけで、Boardクラスに、ゲーム開始時に呼び出しする
void Reset(int);
を作り、その中でPanelとMineをそれぞれリセットするという風にしました。
ところがこの方法だと、何回もリセットしてるうちにメモリ使用量がどんどん増えていきます。
ついには応答がなくなってしまいます。
vectorのメモリがふえつづけているのが原因と考えて、swap手法を使ったのですが、
それでもうまくいきません。
なぜでしょうか?
void Reset(int MaxBoardSquare_){
MaxBoardSquare=MaxBoardSquare_;
panel.clear();
std::vector< std::vector<Panel> >(panel).swap(panel);
for(int i=0;i<MaxBoardSquare;i++){
panel.push_back(std::vector<Panel>());
for(int j=0;j<MaxBoardSquare;j++){
panel[i].push_back(Panel(MaxBoardSquare));
panel[i][j].Reset(i,j);
}
}
mine_num=Ns::GetRand(6)+MaxBoardSquare_*MaxBoardSquare_/10;
mine.clear();
std::vector<Mine>(mine).swap(mine);
for(int i=0;i<mine_num;i++){
mine.push_back( Mine(Panel::GetExRate()) );
}
for(int i=0;i<mine_num;i++){
ResetMinePos(i);
}
}