【问题标题】:Member duplication when using virtual method使用虚方法时成员重复
【发布时间】:2013-05-01 15:06:52
【问题描述】:

当将指针传递给其父对象具有虚函数的对象时,我会在结果对象中奇怪地复制父成员。

子 -> 父 -> 子

someMethod(Parent * obj);

Parent
virtual ~Parent() {}

Child : public Parent()

Child childobj = new Child();
someMethod(childobj);

在通过 soemMethod 后在内存中查看时,显示的结果对象如下所示:

DATA[]
parentvar1
parentvar2
Child[]

->Child[]
->childvar1
->childvar2
->Parent[]

->->Parent[]
->->parentvar1
->->parentvar2

为什么我看到索引 0 和索引 2 处的父数据都重复了?

【问题讨论】:

  • 抱歉,您的问题很混乱,您能否重新表述并使其更精确?特别是最后一部分,这个列表没有意义……
  • Child childobj = new Child(); 我假设Child* childobj? “在内存中查看时”如何?调试器? IDE?
  • 请提交一个完整但最小的示例来说明问题。这不适合我们。
  • 您很快就会发现,如果您想得到答案,就必须将您的问题提出来,以便至少可以理解。

标签: c++ object virtual


【解决方案1】:

我只是猜测,因为您的术语很难理解。

我猜您正在使用调试器(例如 Visual Studio)查看数据,而您的程序当前位于 Parent 类的某个方法中。

在调试器中,您会看到 this 对象中的数据以及堆栈中的变量,您称之为“索引 0”。其中一个变量是另一个Child 对象。由于ChildParent 的子类,您将看到Child 的属性以及它继承的Parent 属性(您称为“索引2”)。

在这种情况下,您看不到任何复制,您只是在调试器中从不同的角度看到相同的数据(或者可能是两个不同的实例)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2011-11-16
    相关资源
    最近更新 更多