C++ return char* 然后删除它

C++ return char* then delete it

所以我有这个功能:

char * func()
{
char * temp = new char[length]; // Length is defined elsewhere
/*
Do some stuff with temp
*/
return temp
}

我的问题是我不确定这是否会泄漏内存。 如果是这样,我不知道如何让它不那样做。 我以为我可以在 return 之后删除它,但是我该怎么做呢? (还假设我不能只在函数外删除它) 此函数是 class 的一部分。这个函数的目的是return一个内部值class。用户将使用此功能。我觉得要求用户事后删除该值太过分了。 谢谢!

My problem is I'm not sure whether or not this leaks memory.

这不会泄漏内存,因为指向分配的指针已返回,因此所有权已转移给调用者。如果调用者在删除之前丢失了返回的指针值,那么调用者已经泄漏了内存。

也就是说,这是一个糟糕的设计。您应该避免拥有裸指针。相反,在这种情况下,我建议返回一个向量。这样向量模板将负责释放分配的内存:

std::vector<char> func()
{
    std::vector<char>(length) temp;
    /*
    Do some stuff with temp
    */
    return temp;
}

或者,如果数组表示文本,您可以考虑使用 std::string

回答 unique_ptr,因为它最接近您的示例中所做的。

auto func()
{
 auto temp = std::make_unique<char[]>(length); // Length is defined elsewhere
 /*
    Do some stuff with temp
    */
 temp[0] = 12;
 return temp;
}

由于内存是由智能指针管理的,因此没有泄漏,并且是否自行记录了谁是内存块的所有者:拥有 unique_ptr

的人