【发布时间】:2014-01-20 03:15:20
【问题描述】:
我创建了某个类的对象。该类是“节点”,它的属性为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);
}
从代码 cmets 中可以看出,当它传递给第二个方法时,它似乎丢失了值。我已经尝试对此进行研究,但在理解原因时遇到了一些真正的麻烦……有人可以帮忙吗?
顺便说一句,如果有人想知道第二种方法的返回值,我打算将结果指针传递给我利用它进行处理的第三个函数(混乱,我知道,但我继承了代码和别无选择);以防万一这对答案有任何影响。
提前致谢!
【问题讨论】:
-
retObject是一个局部变量(自动变量),它的生命周期不会超过GetObject,在方法返回后试图引用该内存是未定义的行为。
标签: c++ visual-studio-2010 pointers methods reference