我的代码具有以下结构:
void classA::function()
{
AnotherClass *A = 0;
ClassB B = new ClassB();
A = B->setupData();
}
AnotherClass *classB::setupData()
{
AnotherClass *a = new AnotherClass();
// setup data
return a;
}
在返回时,a部分具有有效数据。一旦数据返回,其中一个成员现在无效。
我尝试更改函数,以便A通过引用传递,行为相同,在classB中数据有效,返回时除了一个成员外,它是有效的。
我试过将设置分成两个单独的函数,如下所示:
AnotherClass *classB::setupData()
{
AnotherClass *a = setupData2();
return a;
}
AnotherClass *classB::setupData2()
{
AnotherClass *b = new AnotherClass();
// setup data
return b;
}
再次将数据有效,直到其中一个成员无效时将其返回到另一个类。
我在数据成员的内存位置设置了一个断点,它正在消失以查看它是否被覆盖但是没有命中断点。我认为可能是这个成员被分配了本地或其他地址,但似乎也不是。
以前有人见过这样的事吗?
答案 0 :(得分:0)
摆脱好的™的指针。当我们在它的时候,尽可能多地移动到构造函数。
AnotherClass classB::setupData()
{
AnotherClass a(/* setup data */);
return a;
}
应该让你自己摆脱一个以上的问题。
答案 1 :(得分:0)
叹息
事实证明,当对象返回到其类外部的函数时,该成员从该对象中消失,但是当返回到其类中的函数时,该成员是由于Visual Studio的智能感知以某种方式混淆。与Visual Studio 2013(而非2012 Express)相关的同事不会遇到此问题。