次の C コードを考えてみましょう:
<code class="cpp">class Instruction { public: virtual void execute() { } }; class Add: public Instruction { private: int a; int b; int c; public: Add(int x, int y, int z) {a=x;b=y;c=z;} void execute() { a = b + c; } };</code>
別のクラス内:
<code class="cpp">void some_method() { vector<Instruction> v; Instruction* i = new Add(1,2,3) v.push_back(*i); }</code>
そして別のクラス:
<code class="cpp">void some_other_method() { Instruction ins = v.back(); ins.execute(); }</code>
これらのクラスは命令ベクトルを共有します。ただし、execute 関数に関して懸念事項が発生します。 Add タイプは保持されますか?
残念ながら、保持されません。ベクトル参照ではなく値を保存します。これは、命令オブジェクトがある時点でコピーされることを意味し、「オブジェクトのスライス」と呼ばれる現象が発生します。
この問題を解決するには、vector の使用を検討してください。または、より効果的には、vector< std::reference_wrapper >.
以上がC で「vector」を使用するとオブジェクトのスライスが発生しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。