返回局部变量C++的指针

use*_*357 5 c++ pointers function

我需要创建一个返回指向int的指针的函数.

像这样:

int * count()
{
    int myInt = 5;

    int * const p = &myInt;

    return p;
}
Run Code Online (Sandbox Code Playgroud)

由于指针只是一个地址,因此在调用此函数后,变量myInt将被销毁.如何在此方法中声明一个int,它将在内存中保留一个位置,以便我以后通过返回的指针访问它?我知道我可以在函数外部声明int,但是我想在函数内部声明它.

在此先感谢您的帮助!

Nat*_*son 9

使用new运算符

int * count()
{
    int myInt = 5;

    int * p = new int;
    *p = myInt;

    return p;
}
Run Code Online (Sandbox Code Playgroud)

正如其他答案所指出的,这通常是一个坏主意.如果你必须这样做,那么也许你可以使用智能指针.请参阅此问题以了解如何执行此操作 什么是智能指针以及何时应使用智能指针?

  • 这将泄漏记忆,除非他记得释放它. (6认同)
  • 恕我直言 - 创造记忆的东西应该负责释放它.这个答案打破了这种模式. (3认同)

Ed *_*eal 6

你可以使用智能指针.

例如:

unique_ptr<int> count()
{
   unique_ptr<int> value(new int(5));
   return value;
}
Run Code Online (Sandbox Code Playgroud)

然后您可以访问整数,如下所示:

cout << "Value is " << *count() << endl;
Run Code Online (Sandbox Code Playgroud)


Jon*_*ter 5

你可以通过制作变量来做到这一点static:

int* count()
{
    static int myInt = 5;
    return &myInt;
}
Run Code Online (Sandbox Code Playgroud)

  • 只是因为它是真的并不意味着它有用,如果他不理解静态变量,这将使他困惑几个小时 (4认同)
  • 鉴于 OP 的另一个选项是全局变量,这不再危险或令人担忧。它给了他一个具有私有范围的全局变量,我假设因为这是他所要求的,这正是他真正想要的。我认为人们有时倾向于过度分析这里的问题。 (4认同)
  • 它回答了这个问题.为什么你会假装它不可能呢? (3认同)
  • 阅读问题:“我如何在此方法中声明一个 int 以在内存中保留一个位置,以便我稍后通过返回的指针访问它?” 这正是 `static` 关键字所做的。 (2认同)
  • 从技术上讲是正确的,但仅在没有更多上下文的情况下说(例如与线程混合时的风险)是危险的。 (2认同)