在用C++ 中定义的类,如果类成员中涉及到了指针以及开辟内存的问题,这样的类对象之间的赋值很容易造成内存的泄漏,见下面的一种情况。代码如下:
类的定义和相关的构造函数如下:
class image
{
public:
int width;
int height;
int* pImg;
image(int w, int h, int value);
};
image::image(int w, int h, int value)
{
width = w;
height = h;
pImg = new int[w*h];
for(int i=0;i<w*h;i++)
pImg[i] = value;
}
主函数的代码如下:
image A(100, 100, 100);
cout << A.pImg << endl;
image B(100, 100, 10);
cout << B.pImg << endl;
cout << B.pImg[10] << endl;
B =A;
cout << B.pImg << endl;
cout << B.pImg[10] << endl;
return 0;
代码中,对象A和B都在析构函数中开辟了内存,但是后来将A直接赋值给B,运行结果如下:
结果显示:A和B对象创建后,分别调用析构函数开辟了内存,且A和B指针成员的内存的地址不同,以及开始的数据也不同。但是在将对象A赋值给对象B之后,对象B的指针成员的地址和A的一样,即:对象B的指针成员指向了A的对象所开辟的内存。这样导致了内存泄漏,对象B原始的内存开辟了,但是一直没有使用,即使想释放也无法释放,因为丢失了其起始的地址。