从C ++中的成员函数返回指针

时间:2010-10-12 04:30:29

标签: c++ pointers

您好我有一个带有返回指针的函数的类:

int* Maze::GetStart()
{
    int startNode = 1;

    return &startNode;
}

在函数返回指针后,是否会删除startNode的值?

如果我这样做了,那么值会被保存吗?

int Maze::GetStart()
{
    int startNode = 1;

    return startNode ;
}

main
{
    int* pStart = maze.GetStart();
}

2 个答案:

答案 0 :(得分:4)

  

是否会删除startNode的值   函数返回后   指针?

一旦函数startNode返回,变量GetStart()将不复存在,所以在这个意义上,是的。

但是,通过将地址返回到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. 

答案 1 :(得分:1)

在堆栈上分配的变量的返回地址根本没有意义。函数startNode返回后,变量GetStart()的生命周期就会结束。它是自由函数还是成员函数无关紧要。

我认为,在gcc / g ++中有一个警告。

基于问题编辑:

如果要修改变量并保存已修改状态,则必须将其声明为static。请参阅static local variables