【发布时间】:2011-06-22 19:18:06
【问题描述】:
我今天遇到了一个关于局部变量的问题。我知道了...
int * somefunc()
{
int x = 5;
return &x;
}
int * y = somefunc();
//do something
很糟糕,不安全等。我想这种情况对于......
int * somefunc()
{
int * x = new int;
x = 5;
return x;
}
int * y = somefunc();
//do something
delete y;
很长一段时间以来,我一直认为这是安全的,因为 x 的地址在返回时仍然在范围内。但是,我现在有了第二个想法,我认为这会导致内存泄漏和其他问题,就像第一个示例一样。有人可以帮我确认一下吗?
【问题讨论】:
-
不,这很好,但如果可能,更喜欢智能指针指向
new/delete。这样可以最大限度地减少泄漏的可能性并清理代码。 -
第二个很好,除了
x = 5;。那应该是*x = 5;。我同意史蒂夫关于智能指针的观点。