以前有个问题一直困扰着我,你用new操作符在某个函数中分配的空间不会因为这个函数执行结束自动随之消亡,而必须在某个地方用个delete去释放掉这个用new分配的空间才行。这和以往的本地空间分配不同,那么这个就是动态分配的过程。
从计算机内存的角度讲,本地变量所需空间是在栈上完成的,而动态分配所需空间是在堆上完成的。
一般来讲负责空间分配的内存分为三个部分:1、静态存储区;2、自动变量存储区;3、动态存储区。
值得一提的是指向动态分配空间的指针是存储在静态存储区的。这很好解释,如果它是存储在自动变量存储区,那函数结束以后,这个指针就找不到了,delete也找不到那块已经分配的空间的起始地址了。它更不可能在动态存储区,因为为这个指针分配动态空间是一种对宝贵动态空间资源的浪费,而浪费就是犯罪啊。所以它只能在静态存储去里面,这也就意味着在一般情况下它具有外部连接属性。
在这里有一点要注意,虽说一般程序结束以后被new分配的空间会自动释放,但是也不排除有些操作系统做得比较垃圾,所以你还是养成手写delete的习惯吧。
你也可以用new来给那些内置类型分配空间、结构体、数组分配空间。在C++11里面还能初始化,不过现在我试不出来。