我创建了某个类的对象。该类是“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);
}
正如您在代码注释中看到的那样,它传递给第二个方法时似乎失去了价值。我试图对此进行研究,但是在解决原因方面遇到了一些麻烦......有人可以帮忙吗?
顺便说一句,如果有人想知道第二种方法的返回值,我打算将结果指针传递给第三个函数,我将其用于处理(凌乱,我知道,但我继承了代码和别无选择);以防万一与答案有关。
提前致谢!
答案 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
是一个局部变量,对象的任何使用都是未定义的。在这种情况下,您将返回指向该对象的指针。