今天,我没有多想,就根据给定枚举值的 switch 语句编写了一个返回 char* 的简单函数。然而,这让我想知道如何释放那段记忆。我所做的是这样的:
char* func()
{
char* retval = new char[20];
// Switch blah blah - will always return some value other than NULL since default:
return retval;
}
如果这是一个幼稚的问题,我很抱歉,但是释放内存的最佳方法是什么,因为我无法在返回后删除内存,而且显然,如果我之前删除它,我将不会有返回值。我认为可行的解决方案是这样的
void func(char*& in)
{
// blah blah switch make it do something
}
int main()
{
char* val = new char[20];
func(val);
// Do whatever with func (normally func within a data structure with specific enum set so could run multiple times to change output)
delete [] val;
val = NULL;
return 0;
}
有人对此有更多的见解和/或解释使用它吗?
Regards,
丹尼斯·M.
您可以成对编写这样的函数,例如
Xyz* CreateXyz();
void DestroyXyz(Xyz *xyz);
Abc* NewAbc();
void DeleteAbc(Abc *abc);
或者您根本无法将删除 Xyz/Abc 的责任转移给客户端,即调用该函数的人也必须这样做delete
使用后返回的对象。
无论您选择什么,请在文档中明确说明how创建的对象应该被销毁。
我更喜欢配对功能,尤其是在删除之前需要考虑很多事情的情况下!
顺便说一下,你应该更喜欢使用std::string
, 代替char*
。尽可能多地利用STL。他们可以解决你的大部分问题!以上建议是针对STL不适合的情况!总的来说,更喜欢STL!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)