operator= 要注意避免内存泄露(项目经验)

来源:互联网 发布:记忆宫殿知乎 编辑:程序博客网 时间:2024/06/08 07:38
指针不论是指向malloc还是new分配得到的内存,一定要注意在改变指针指向之前一定要先释放旧的内存块。

class Test
{
public:
                 Test()
                {
                                 if (p != NULL)
                                {
                                                 free(p );
                                                 p = NULL ;
                                }
                                 p = (char *)malloc( sizeof(char ));
                }
                 Test(const Test & C1)
                {
                                 cout << "ooo我在进行拷贝构造" << endl;
                                 p = (char *)malloc( sizeof(char ));
                                * p = *C1 .p;
                }
                ~ Test()
                {
                                 cout << "ooo我在析构" << endl;
                                 if (p !=NULL)
                                {
                                                 free(p );
                                                 p = NULL ;
                                }
                }
                 void operator=(Test &C2)
                {
                                 if (p !=NULL)
                                {
                                                 free(p );
                                                 p = NULL ;
                                } 
                //这里很重要,A=B时,A本身已经malloc了一块内存,如果此时没有              
                  free,直接执行下面一句让p指向另一块内存,那么之前malloc出来的     
                  内存如何释放?
                                 p = (char *)malloc( sizeof(char ));
                                           *p = *C2.p;
                }
private:
                 char *p ;
};
void main ()
{
                 Test A ;
                 Test B ;
                 A = B ; //这里要注意,直接“=”的情况下不会调用拷贝构造函数,要用=重载来避免浅拷贝
}
0 0
原创粉丝点击