关闭

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

标签: 内存泄露经验c++
287人阅读 评论(0) 收藏 举报
分类:
指针不论是指向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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11162次
    • 积分:326
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:4篇
    • 译文:0篇
    • 评论:1条