プログラム全体で、同様の問題に直面しているオブジェクトがいくつかあります。一例:
私は画像クラスを持っています:
class Image
{
public:
Image();
Image(const Image& copy);
~Image();
void loadimage(string filename);
void saveimage(string filename);
Image superimpose(const Image& ontop, Color mask);
int getwidth();
int getheight();
Image operator=(const Image&);
protected:
Color** pixels;
int width;
int height;
ImageLoader* loader;
};
コピー コンストラクターがあります。
Image::Image(const Image& copy)
{
width = copy.width;
height = copy.height;
loader = copy.loader;
pixels = new Color*[height];
for(int i = 0; i < height; i++)
{
pixels[i] = new Color[width];
}
for(int h = 0; h < height; h++)
{
for(int w = 0; w < width; w++)
{
pixels[h][w] = copy.pixels[h][w];
}
}
}
色は構造体です:
struct Color
{
unsigned int r;
unsigned int g;
unsigned int b;
};
私の懸念は、Color 構造体の動的な 2 次元配列を作成することですが、それをいつどこで削除すればよいかわかりません。Image デストラクタに以下を実装しましたが、それが機能していることを 100% 確信しているわけではなく、機能しているかどうかを確認する方法もわかりません。
Image::~Image()
{
for(int i = 0; i < height; i++)
{
delete[] pixels[i];
}
delete[] pixels;
pixels = NULL;
}
メモリの割り当て解除を正しく実装していますか?