-3

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

孩子 -> 父母 -> 孩子

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 处都重复?

4

1 回答 1

1

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

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

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

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

于 2013-05-01T16:56:20.293 回答