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
的人
所以我有这个功能:
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
的人