关于变量的生命周期和new delete的有关问题
关于变量的生命周期和new delete的问题根据书上说,在函数中定义的变量,生命会在这个函数结束后自动结束,也
关于变量的生命周期和new delete的问题
根据书上说,在函数中定义的变量,生命会在这个函数结束后自动结束,也就是释放掉了
那么在main函数中定义的变量,某种情况下不就是全局变量吗?
另外,如果new一个空间出来,而我没有delete它,是不是它就不会释放?哪怕main结束
如果我说的是对的,那我直接都用指针不就好了?不然定义变量还要考虑作用域的问题,明显多此一举啊……
再次另外,有时候又觉得指针很多余,比如我int *a; 明显没有int a; 好,因为前者开辟了两个空间,一个存放整数,一个存放地址;而对于后者只开辟了一个空间存放整数。【额……作用域嘛……暂时不考虑】
问题是不是很痴线啊……但是真的搞不懂语言开发者们是怎么个想法
[解决办法]
不是吧,主要是看你能不能用好指针
[解决办法]要么你看的书不合格,要么你误解作者了。
1.栈的空间有限, 不能所有的对象都放在栈。所有需要堆和全局空间。
2.为啥有指针?间接性带来了灵活性和高性能。
3.(虚拟)内存不是无限的, 为了访问更多数据,进程需要中途释放部分空间,从而载入更多输数据。
[解决办法]谭浩强的书就不要看了,纯粹误人子弟,看C++ primer吧
关于堆和栈并不是说就是数据结构中的,这里涉及到C++的内存管理。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时,这部分内存就自动释放。栈的效率很高,但是容量很小。栈上的内存管理是编译器进行操作的。
堆,就是new分配的内存块,他们的释放编译器不会管,所以就是程序员做的事情。而你不释放的话,这部分在函数里面声明的指针以及申请的内存因为作用域的问题你也无法访问,就会造成内存泄漏。所以你说的什么申明一个指针就是全局变量这也不存在。
[解决办法]lz 对于所提问题的理解和想法都是错的。。。
不过回想起来,我刚开始学的时候的理解也不怎么对(我接触的第一本“教程”也是谭绿皮)。
后来学了x86汇编后,才逐渐弄清楚“堆栈”是什么,还有 auto、static、register、extern 各自的作用,以及分配内存的类型和位置,全局、静态、自由存储和堆内存。
lz 如果想深入理解的话,也学一下汇编吧