今天,我没有多想,写了一个简单的函数,根据给定枚举值的 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;
}
是否有人对此有任何见解和/或对使用哪个的解释?
问候,
丹尼斯 M.
最佳答案
你可以成对地编写这样的函数,比如
Xyz* CreateXyz();
void DestroyXyz(Xyz *xyz);
Abc* NewAbc();
void DeleteAbc(Abc *abc);
或者您可以简单地将删除 Xyz/Abc 的责任转移给客户端,即调用该函数的人还必须在使用后对返回的对象执行 delete
操作。
无论您选择什么,请在您的文档中明确如何创建的对象应该被销毁。
我更喜欢对函数,尤其是在删除之前需要考虑很多事情的情况下!
顺便说一句,您应该更喜欢使用 std::string
,而不是 char*
。尽可能多地使用 STL。他们可以解决你的大部分问题!以上建议是针对STL不适合的情况!一般来说,更喜欢STL!
关于c++ - 返回 char* 函数的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4534679/