2010-10-12 73 views
1

你好,我有一个返回指针的函数类:从C++中的成员函数返回一个指针

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

    return &startNode; 
} 

将函数返回指针后的StartNode的值被删除?

如果我这样做,而不是值将被保存?

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

    return startNode ; 
} 

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

回答

4

会的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. 
+0

谢谢我根据你的回答更新了我的问题。 – Arizona1911 2010-10-12 04:38:03

+0

好的,但我想指向返回值的指针。我的更新代码是否指向值1? – Arizona1911 2010-10-12 04:40:07

+0

@ Arizona1911:你的意思是“返回值的指针”?你为什么需要这样做? – 2010-10-12 04:41:49

1

返回分配堆栈没有任何意义可言变量的地址。只要函数GetStart()返回,变量startNode的生存时间就会结束。它是否是一个自由函数或成员函数并不重要。

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

基于问题编辑:

如果要修改的变量并保存修改状态,那么它必须声明为static。见static local variables