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

标签 c++ windows linux compiler-construction memory-management

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

相关文章:

c++ - 对 valgrind 的补充?

c++ - 由另一个数组中的值组成的数组

c++ - QMake-如何以及在何处添加链接器标志?

linux - 从干净的登录 shell 运行,无需凭据

php - 从 PHP 调用时 Bash 无法创建文件

c++ - 未解析为候选容器的模板运算符模板

javascript - 省略一些 C++ 子系统

windows - 从 powershell 回显/访问环境变量

python - Windows 中的 PyBonjour 错误 - 无法加载库 libdns_sd.so.1

linux - 哪个目录有更多的文件,哪个有更多的子目录?