繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM