-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」と呼ばれるもの) が表示されます。これらの変数の 1 つは別のChildオブジェクトです。Childは のサブクラスであるため、そのプロパティと継承するプロパティ (「インデックス 2」と呼ばれるもの)Parentの両方が表示されます。ChildParent

この場合、コピーは見られず、デバッガーの異なる視点から同じデータ (またはおそらく 2 つの異なるインスタンス) が表示されているだけです。

于 2013-05-01T16:56:20.293 に答える