首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于new一点不明白之处;该怎么处理

2012-04-01 
关于new一点不明白之处;voidfn(){Tdate*Ps;//(1)PsnewTdate;//(2)分配堆空间并构造它;//...deletePs;//(3

关于new一点不明白之处;
void   fn()
{
    Tdate   *   Ps;//(1)
    Ps   =     new   Tdate;//(2)分配堆空间并构造它;
    //...
  delete   Ps;//(3)先析构,将空间返回给堆;
}
书上接着说:
    如果是分配局部对象,则在该局部对象退出作用域时(要么程序遇到函数结束标记‘}’,要么是return语句)
但是堆对象的作用域是整个生命周期。堆对象析构是在delete语句上执行。
 
我的理解:(1)处是申明且定义了一个Tdate指针;
                      (2)处是将指针指向一个特定的堆中区域;
                        然后使用该区域;                
如果此函数没有(3)      
Ps   还是离开了该函数被释放掉。而开辟的堆空间将没有释放。是这样么??




[解决办法]
基本上是这样的。
[解决办法]
函数结束后,指针无效,但申请的空间还在,在整个程序结束后被释放。
[解决办法]
離開函數后,Tdate,這個變量的空間無效(被釋放), 但是它指向的空間是需要delete才能釋放的。
[解决办法]
Ps 还是离开了该函数被释放掉,但Ps所指的内存空间仍标志为不可被分配的,即你只要取得这段内存的首址,一样可以继续用,而不用担心被重新分配以至于影响你保存在这里的数据,其实C中的malloc就是返回了一个被分配的内存段的首地址,就是这么回事.

热点排行