变量和内存
来源:互联网 发布:npm安装淘宝镜像 编辑:程序博客网 时间:2024/05/22 03:51
写程序,发现要把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了很多次的。
当然,这些,只是我自己的理解,可能有偏差。
- 变量和内存地址
- 变量和内存分配
- 变量和内存
- 变量和内存地址
- 变量和内存
- 实例变量和类变量内存分配
- 变量和内存的关系
- Block和变量,内存管理
- gdb 查看变量和内存
- 变量的内存分配和释放
- float和double变量的内存布局~~~~~~
- 变量的内存分配和释放
- 变量的内存分配和释放
- float和double变量的内存布局~~~~~~
- float和double变量的内存布局~~~~~~
- js变量、作用域和内存问题
- C变量定义和内存分配机制
- 四、变量、作用域和内存问题
- struts2采用convention-plugin实现零配置
- 安装SSL证书后,解决混合内容造成页面错误提示的处理办法
- Dispatcher initialization failed java.lang.RuntimeException
- [C]获取用户输入字符串------在不知道用户输入长度的时候
- mysql安装图解 mysql图文安装教程(详细说明)
- 变量和内存
- 11
- 归并排序
- 练习,求一年第几天
- 简述(function($){}) 和$(function(){}) 和$(function($){}) 的区别
- 从程序员到SAP顾问
- 马航MH370航班上5名乘客身份不明 马方已着手调查
- 循环冗余检验 (CRC) 算法原理
- 开发笔记之20140319