gpt4 book ai didi

通过返回指向简单类型的指针的 C++ 内存管理

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:13 25 4
gpt4 key购买 nike

我想问一下下面的情况

int * foo() {
int fooint = 5;
return &fooint;
}

int myint = *foo();

它基于 http://www.functionx.com/cpp/examples/returnpointer.htm

但我想问一下,它是否安全,因为我认为会发生什么

  • fooint 在 foo() 的范围内被初始化
  • 返回fooint的地址,foo()结束
  • foo() 中的所有变量都被销毁
  • 所以 myint 将保存一个 int 的值(value),在销毁的地址

这样做不是更好吗

int * foo() {
int * fooint = new int;
*fooint = 5;
return fount;
}

int * tmp = foo();
int myint = * tmp;
delete tmp;

最佳答案

是的,您不应该完全按照您给出的原因返回临时变量的地址。第二种变体没问题。

然而,为内置类型使用动态内存分配会非常昂贵。对于内置类型,按值返回会便宜得多:

int function()
{
return 5;
}

而且它也不太容易出错(例如,不可能发生内存泄漏)。

关于通过返回指向简单类型的指针的 C++ 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4471395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com