在整个程序中,我有一些对象面临着类似的问题。一个例子:
我有一个图像类:
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 结构的动态二维数组,但我不确定何时何地删除它。我在我的 Image 析构函数中实现了以下内容,但我不能 100% 确定它正在完成这项工作,我不确定如何检查它是否有效:
Image::~Image()
{
for(int i = 0; i < height; i++)
{
delete[] pixels[i];
}
delete[] pixels;
pixels = NULL;
}
我是否正确实现了内存释放?