返回指向函数声明的数据的指针

sp.*_*sp. 9 c c++ pointers

我知道这不起作用,因为变量x在函数返回时被销毁:

int* myFunction()
{
    int x = 4; return &x;
}
Run Code Online (Sandbox Code Playgroud)

那么如何正确地返回指向我在函数中创建的东西的指针,以及我需要注意什么?如何避免内存泄漏?

我也用过malloc:

int* myFunction2()
{
    int* x = (int*)malloc(sizeof int); *x = 4; return x;
}
Run Code Online (Sandbox Code Playgroud)

你是如何正确地做到这一点的 - 在C和C++中?

Fre*_*son 7

对于C++,您可以使用智能指针来强制执行所有权转移. auto_ptr或者boost::shared_ptr是不错的选择.


Lau*_*ves 6

你的第二种方法是正确的.您只需要清楚地记录调用者"拥有"结果指针,并负责释放它.

由于这种额外的复杂性,很少为像"int"这样的"小"类型执行此操作,尽管我假设您在这里仅使用了一个int作为示例.

有些人还希望将指向已分配对象的指针作为参数,而不是在内部分配对象.这使得更清楚的是调用者负责释放对象(因为他们首先分配它),但是使调用站点更加冗长,所以这是一个权衡.


Fre*_*son 5

对于C++,在许多情况下,只需按值返回.即使在较大物体的情况下,RVO也会经常避免不必要的复制.