c++ - 何时删除返回值的已分配内存

标签 c++ pointers memory-management

当我删除给定函数“lowerCaseWord(char* a)”的 b 的内存时?我需要返回b的值,所以不能在“return b;”这一行之前删除它。我需要使用另一个变量吗?还是编译器单独删除它(即使它不是很好的编程)?

char* lowerCaseWord(char* a)
{
    char *b=new char[strlen(a)];
    for (int i = 0; i < strlen(a); i++)
    {
        b[i] = tolower(a[i]);   
    }
    return b;

最佳答案

您需要自己在函数外删除[]它,尽管这不是一个好的做法。如:

char* rtv = lowerCaseWord(a);
// process with rtv
// ...
delete[] rtv;

最好用smart pointer避免手动内存管理,例如:

std::unique_ptr<char[]> lowerCaseWord(char* a)
{
    ...
}

然后

std::unique_ptr<char[]> rtv = lowerCaseWord(a);
// process with rtv
// ...

正如@FrerichRaabe 指出的那样,基本上使用原始指针不是一个好主意,您可能想直接使用 std::string

关于c++ - 何时删除返回值的已分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34945706/

相关文章:

c++ - 在 Windows 2008 R2 SP1 上使用 GetVersionEx 时出现错误行为

c - 更改指针 (C) 时数组元素会发生什么?

c++ - 在 C++ 中获取给定指向它的指针的类型名的类型名

objective-c - 为委托(delegate)提供 'strong' 引用是否可行?

java - Android 上 Java 中的对象内存管理

c++ - double 值以整数形式打印

c++ - CentOS构建wxWidget项目失败,错误: invalid static_cast from type ‘wxAppConsole*’

c++ - 带智能指针的多态性

c++ - 获取错误没有匹配函数调用 ' '

ios - 关闭模态视图导致 CALayer retainCount 发送到释放