gpt4 book ai didi

c++ - 返回 char* 函数的内存管理

转载 作者:可可西里 更新时间:2023-11-01 11:10:05 26 4
gpt4 key购买 nike

今天,我没有多想,写了一个简单的函数,根据给定枚举值的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com