[英]Returning a pointer from a member function in C++
您好,我有一个带有返回指针的函数的类:
int* Maze::GetStart()
{
int startNode = 1;
return &startNode;
}
函数返回指针后,是否会删除startNode的值?
如果我这样做了,将保存该值吗?
int Maze::GetStart()
{
int startNode = 1;
return startNode ;
}
main
{
int* pStart = maze.GetStart();
}
函数返回指针后,是否会删除startNode的值?
一旦函数GetStart()
返回,变量startNode
将不再存在,因此从某种意义上说是的。
但是 ,通过将地址返回到GetStart()
返回时将消失的东西,您的代码为未定义的行为提供了巨大的机会。 如果调用方尝试取消对返回的node*
引用,则可能发生任何事情。 另外,由于您无法将int*
隐式转换为node*
,因此代码可能无法原样编译。
但是,如果按值返回,则应该没问题:
int Maze::GetStart()
{
int startNode = 1;
return startNode;
// return 1; // Why not do this?
}
int pStart = maze.GetStart(); // Get returned value as int, not pointer to int.
在堆栈上分配的变量的返回地址根本没有意义。 一旦函数GetStart()
返回,变量startNode
的生命周期就会结束。 它是自由函数还是成员函数都没有关系。
我认为,在gcc / g ++中对此有警告。
根据问题编辑:
如果要修改变量并保存修改后的状态,则必须将其声明为static
。 请参阅静态局部变量 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.