C++ 函数外部丢失的指针对象

C++ Pointer object lost outside of function?

本文关键字:指针 对象 函数 外部 C++      更新时间:2023-10-16

我创建了一个某个类的对象。该类是"节点",它的属性为 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);
}

正如您在代码注释中看到的那样,当它传递给第二个方法时,它似乎丢失了值。我试图对此进行研究,但在掌握原因时遇到了一些真正的麻烦。谁能帮忙?

顺便说一句,如果有人想知道第二个方法的返回值,我打算将结果指针传递给第三个函数,在那里我用它来进行处理(我知道很混乱,但我继承了代码,别无选择);以防万一这对答案有任何影响。

提前感谢!

int 此方法:

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<>。

当您超出

函数范围GetObject未定义对象的任何使用时,Node retObject是一个局部变量。 在本例中,您将返回指向该对象的指针。