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

函数体内new出来的局部对象,冲出函数后,该对象消失吗

2013-01-02 
函数体内new出来的局部对象,跳出函数后,该对象消失吗如题。举个例子:/***********************************

函数体内new出来的局部对象,跳出函数后,该对象消失吗
如题。
举个例子:
/***************************************************************/
tempalte<class T>
class Chain{
    ....
    Chain<T>* Merge(const Chain<T>& z) const;//合并链表:当前链表与链表z合并,返回链表指针。
    ....
}

template<class T>
Chain<T> * Chain<T>:: Merge(const Chain<T>& z)const;
{
    Chain<T> *x = new Chain<T>;//合并好的链表放入x,并作为返回值
    .....
    return x;
    delete x;//显然现在删除x已经没用了,因为return已经跳出函数
}
void main(){
    Chain<int> y;//假设已经有好多节点了
    Chain<int> z;//假设已经有好多节点了
    Chain<int> *p = new Chain<int>;
    p = y.Merge(z);
    p.Output();//输出链表p,但此时merge()函数中的x仍然存在
}
/***********************************************************/
上述示例代码的意思是将两条单链表合并,并返回合并后的链表的指针。
我想问的是main()函数执行完了,Merge函数中new出来的x是否还没有删除,我知道我函数中的delete x是错的。哪位能帮忙看看,如何将x占用的内存释放。


[解决办法]


    Chain<int> y;//假设已经有好多节点了
    Chain<int> z;//假设已经有好多节点了
    Chain<int> * p = y.Merge(z);
    p.Output();//输出链表p,但此时merge()函数中的x仍然存在
    delete p;


[解决办法]
在函数内分配局部变量,如果用new关键字,则在堆上分配,如果用static关键字,则保存在数据段(data section),这两种情况函数返回了都还存在的。只有在栈上分配的时候,函数返回该局部变量才无效,而且会被其他函数的数据覆盖掉

热点排行