0

私は AS3 (オブジェクト指向 Javascript) でコードを書いており、C++ を学んでいます。

C++ では、コピーinstance1 = instance2を複製して名前を付けているようです。「文字列」と数値のみがそのように複製され、他のタイプが「参照」されるため、両方が同じオブジェクトを指す AS3 とは異なります (C++ ポインターのように)。instance1instance2

だから私の質問は:

「Battlefield 4」(またはハードウェアを大量に消費するゲーム) のソース コードがあり、ゲームのメイン クラスのインスタンスを次のようにBattleField4 gameInstance = new BattleField4()実行しているとしますBattleField4 gameCopy = gameInstance

それは、ゲームの進行状況とメモリに読み込まれたグラフィックスの "完全なコピー" を意味しますか?

ゲームが 10Gb のメモリを RAM にロードした場合、20GB がロードされgameCopy = gameInstanceますか?

助けてくれてありがとう。私の英語が明確だったことを願っています。

4

6 に答える 6

4

C++ では、objタイプ のオブジェクトがありType、実行すると:

obj = newObj;

newObjもタイプ のオブジェクトである場合、これはのコピー コンストラクターTypeを呼び出します。Typeそれは「総コピー」を実行しますか?

Typeコピー コンストラクターの実装方法によって異なります。C++ では、型はコピーが作成されたときに何が起こるかを選択できます。場合によっては、内部データをコピーするだけです。場合によっては、型内で新しいオブジェクトをインスタンス化する必要があります。これにより、ポインターによって内部的に保持されるより大きなオブジェクトを適切にコピーできます。

Type場合によっては、問題の には「参照セマンティクス」があると言います。これは、オブジェクトを「コピー」することによって、同じデータを内部的に参照するType2 つの別個のオブジェクトが得られることを意味します。Typeつまり、どちらも同じものを参照しています。これは完全に有効であり、多数のユーティリティ C++ クラスで使用されています。

また、コピーを完全に禁止する場合もあります。これは通常、参照セマンティクスに適しておらず、コピーするのが面倒なオブジェクトに対して行われます。ゲームに、ゲームを表す 1 つの巨大でモノリシックなオブジェクトがある場合、それはコピーできなくなるか、そのコピー コンストラクターが完全に壊れて機能しなくなります (ゲーム開発者は、これらのことに怠惰であることで有名です)。

于 2013-08-25T05:43:19.630 に答える
0

私は自分の質問に答えます:

複製オブジェクトのすべてのプロパティがコピーされます。はい、それはパフォーマンスの問題になる可能性があります。そのため、人々はポインターを使用します。「=」演算子を使用すると、C++ はオブジェクトの「浅いコピー」を作成します (デフォルト)。これを変更するコピー コンストラクターを定義して、たとえば「ディープ コピー」モードでクラスを作成することができます。

「浅いコピー」とは何かを検索すると、C++ オブジェクトのコピーがどのように機能するかについて必要な情報が得られます。

「浅いコピー」と「深いコピー」のこの比較は、非常に有益です。

他のオブジェクトへのポインターを含むオブジェクトの場合、シャロー コピーはポインターのみをコピーし、ポインターが指すオブジェクトはコピーしません。その結果、含まれている同じオブジェクトを指す 2 つのオブジェクトが作成されます。ディープ コピーは、ポインターとそれらが指すオブジェクト、およびそのオブジェクト内に含まれるポインターまたはオブジェクトなどをコピーします。シャロー コピーだけが必要な場合は、ディープ コピーを実行しないでください。

于 2013-08-25T22:02:51.737 に答える
0

洗練された型に対する C++ での代入は、ユーザー定義です。スカラーおよび単純な集約代入は値によるものですが、オブジェクトがピアおよび従属オブジェクトとの関係を取得し始めると、実際の複製が必要な部分と、複製がもたらすその他の影響を C++ に正確に伝えることができます。ゲームのメディア オブジェクトの最上位インベントリは、ほぼ確実に単純な参照コピーになります。

于 2013-08-25T13:44:30.260 に答える