在C++中,如果用new在堆中分配了一块内存,没有对其进行释放,就会产生内存泄露。
char *a=new char[10];
char *b="hey";
strcpy(a,"hello");
此时如果让a指向其他地方,比如说a=b;那么原先a指向的10个字节的内存块就变成了不可访问的区域,造成内存泄露。
还有一种情况。在类中,如果一个类的成员变量是个指针,并且在构造函数中使用new分配了内存,并在析构函数中调用delete释放了该内存。当你用该类的一个对象去初始化另一个对象,或者给另一个对象赋值时,都会调用拷贝构造函数,但此时是浅拷贝,因为他们的指针成员变量指向同一块内存,他们不是独立的,对该指针的指向数据的操作会影响到另一个对象,另外,析构的时候会过度释放,因为用new分配的内存被释放了2次,程序会崩溃。
解决办法是重新写拷贝构造函数,重载=操作符。
原文地址:http://www.cnblogs.com/superzzh/p/3819219.html