C++动态内存在函数中释放

来源:百度知道 编辑:UC知道 时间:2024/09/21 22:01:35
看下面的代码
class fi
{
public :
fo();
void fok()
{
char* s= new char('a');
}
~fi();
}
在fok函数中动态分配的内存,在构析函数中是不能分配的;
那如何释放呢。
那直接返回呢
例如
char* fok()
{
return new char('a');
}

可以,你要把指针保存起来!

很简单啊,你要是声明为函数内局部,你就在函数里释放;
你一定要在函数外释放的话,把指针声明在类中,造构时置NULL,在函数中检测不为NULL则分配。在析构中,不为NULL就释放,释放完记得再置NULL!或专门定义一个释放它的函数,在析构中调用!这方法很常用!

还可以用参数来返回!反正就是,你想在函数外完成释放,就应该在函数外有一个指针,然后函数内必须可以操作这个指针,对它进行分配内存等等,不管你是怎么传它到函数里!

//这种写法没见过!
char fok()
{
return new char('a');
}

构析函数释放所有这个对象获得的内存,如果动态分配的话,需要自己手动释放

void fok()
{
char* s= new char('a');
}
函数中你用new表达式动态创建了一个对象,指定为char类型,初始值为a.返回指向新创建对象的指针,可以通过指针访问此对象。你在这个函数内,动态创建了,说明它是在这个函数内使用,当动态创建的对象用完后,程序员必须显式的将该对象占用的内存返回给自由存储区。
这时候应该利用delete表达式释放指针所指向的地址空间。
delete s;
所以你fok()函数应该写成
void fok()
{
char* s= new char('a');
delete s;
}
也就是你要养成,动态创建的对象用完后,就用delete释放掉的习惯。
另外,删除指针后,立即将指针置为0,这样就非常清楚的表明指针不再指向任何对象。这样也是避免悬垂指针的有效手段。
悬垂指针就是指向曾经有效对象的内存,但该对象现在已经不存在了。

既然s是局部变量,那就应该在函数中释放掉

首先,fok是一个成员函数,成员函数也是一个函数,那么在函数中的变量在函数执行完毕后会自动消亡。所以不