一般指针问题

时间:2014-10-15 08:25:37

标签: c++ pointers

我尝试过以下方法:

std::string* Member::GetName()
{
    std::string name2 = "sdfsdfsd";
    return &name2;
}

std::string* name;
Member m;

name = m.GetName();

std::cout << *name  << std::endl;

并且&#34;工作&#34;,但在调用GetName()之后,name2不可用?我的指针指向什么?

编辑:

多年后回来更多exp。 一些人已在下面回答了这个问题。

返回本地是坏事!如果堆栈上的值没有被覆盖,你可能会侥幸逃脱它,所以通常当你在返回本地后直接使用它时你可能得到正确的值,但是这仍然是未定义的行为。 也没有返回const&amp;也不起作用,即使现在有时我认为它将返回值绑定到临时值,就像它对const&amp; amp;参数,但不是返回类型的情况,返回r值refs也是如此。 你只能返回一个副本,并将其作为const ref,如此

std::string GetName();

const std::string& name  = GetName();

这将它绑定到临时因此是有效的检查草药sutters gotw: https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ 对于const ref temporaries。

1 个答案:

答案 0 :(得分:3)

获取本地堆栈变量的地址,并在它不再在范围内时使用它未定义的行为

至于&#34; 它起作用&#34;,它并不意味着它将始终有效或者这是一种可靠的做法。返回时,堆栈不会立即被清除。看看&#34; undefined behavior&#34;

的定义