变量和内存

    写程序,发现要把new的东东delete掉,老大确说,在整个类的析构函数中,一起delete,我却不明白,明明是局部变量,在该函数外面的另外的函数中做delet,岂不是会报错?

    其实,是我一直没弄明白变量和内存的关联

    并不是说在{}内的变量都是局部变量,关键是看一个变量的定义和存贮方式。

     fun1(){int i = 0;}

     毫无疑问,这定义了一个局部变量,编译器会为i 分配内存并将它存贮于函数栈中。

     出了函数,编译器将此变量自动解析,一切OK!


     而如果你采用了动态内存分配符,那么这个变量,就是一个全局变量了,而且存贮在堆中,你不清除,它将永远存在也就是说是你一手分配了这块内存,那你怎么能指望自己作的事却要编译器来收场呢?所以需要自己delete!

     由此可见,new的东东,并非局部变量,看一个变量是否是局部变量,要看他的定义和存贮方式!



    另外一个问题:具体到我今天所做的程序,

     for (int i =0; i < nNum; i++)
{
USER_INFO* pInfo = new USER_INFO;
rFile.Read(pInfo, sizeof(USER_INFO));
m_UserInfoVec.push_back(pInfo);
}

       这里,new的东东,最终是push到向量中去了,那么在外面的类的析构函数中,如何做delete呢,单看pInfo,我最初以为是局部变量,在外面函数没法delete,现在,知道了,他不是局部变量,在其所在的函数外面,可以做析构,那么,该如何做delete呢?

            这里,要看看这个变量最终的归宿是干什么了?程序可见,它push到向量了

           所以,它的delete,是这样的


         for (int i = 0; i < m_UserInfoVec.size(); i ++)
{
USER_INFO* pUserInfo = m_UserInfoVec[i];
if (pUserInfo)
{
delete pUserInfo;
pUserInfo = NULL;
}
}
m_UserInfoVec.clear();



        这里,可以看到,deletel了多次,其实仔细想想,确实该如此,因为在它的使用当中,也是在for循环当中,new了很多次的。


当然,这些,只是我自己的理解,可能有偏差。

        

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值