C ++指针对象在函数外丢失了吗?

时间:2014-01-02 16:12:30

标签: c++ visual-studio-2010 pointers methods reference

我创建了某个类的对象。该类是“Node”,它的属性为CString strName。可以使用Node:CString Node::GetName()的方法检索此变量的值,该方法只返回变量的名称。

在下面的方法中,我实例化了这个:

Node* UpperClass::GetObject(CString value) {
    Node retObject;
    retObject.strName = value;

    Trace(retObject.strName); // Prints argument to trace file - this prints the value of strName fine

    return &retObject;
}

然后我在第二节课中运行这个方法:

Node* LowerClass::Get() {
    Node *pReturn = instanceOfUpperClass.GetObject();

    Trace(pReturn->GetName()); // This trace just prints blank...

    return *(&pReturn);
}

正如您在代码注释中看到的那样,它传递给第二个方法时似乎失去了价值。我试图对此进行研究,但是在解决原因方面遇到了一些麻烦......有人可以帮忙吗?

顺便说一句,如果有人想知道第二种方法的返回值,我打算将结果指针传递给第三个函数,我将其用于处理(凌乱,我知道,但我继承了代码和别无选择);以防万一与答案有关。

提前致谢!

2 个答案:

答案 0 :(得分:2)

这个方法:

Node* UpperClass::GetObject(CString value) {
    Node retObject;
    retObject.strName = value;

    Trace(retObject.strName); // Prints argument to trace file - this prints the value of strName fine

    return &retObject; // <-- Undefined Baaviour
}

您正在返回指向本地对象的指针,该对象在此方法结束时会被销毁。您应该动态创建retObject,并返回指向它的指针,或者更好地将此指针放入shared_ptr&lt;&gt;。

答案 1 :(得分:2)

当你超出函数Node retObject的范围时,GetObject是一个局部变量,对象的任何使用都是未定义的。在这种情况下,您将返回指向该对象的指针。