如果从类外部的函数返回,则类丢失数据

时间:2014-08-22 10:16:50

标签: c++

我的代码具有以下结构:

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;
}

再次将数据有效,直到其中一个成员无效时将其返回到另一个类。

我在数据成员的内存位置设置了一个断点,它正在消失以查看它是否被覆盖但是没有命中断点。我认为可能是这个成员被分配了本地或其他地址,但似乎也不是。

以前有人见过这样的事吗?

2 个答案:

答案 0 :(得分:0)

摆脱好的™的指针。当我们在它的时候,尽可能多地移动到构造函数。

AnotherClass classB::setupData()
{
    AnotherClass a(/* setup data */);
    return a;
}

应该让你自己摆脱一个以上的问题。

答案 1 :(得分:0)

叹息

事实证明,当对象返回到其类外部的函数时,该成员从该对象中消失,但是当返回到其类中的函数时,该成员是由于Visual Studio的智能感知以某种方式混淆。与Visual Studio 2013(而非2012 Express)相关的同事不会遇到此问题。