C++ 函数外部丢失的指针对象
C++ Pointer object lost outside of function?
我创建了一个某个类的对象。该类是"节点",它的属性为 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
是一个局部变量。 在本例中,您将返回指向该对象的指针。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它