1

これまでの私の理解では、クラスオブジェクトのベクトルがある場合、ベクトルのメンバーを消去すると、通常、ベクトルはメモリの連続性を維持するためにオブジェクトの一部を再割り当てします。したがって、ベクター メンバーを消去するときにすべてを保持するには、3 つのルール (デストラクタ、コピー コンストラクタ、およびコピー代入演算子) を実装する必要があります。

ただし、クラスオブジェクトへのポインターのベクトルの場合、結果はあまり明確ではありません。メンバーを消去すると、確かにC++はポインターをコピーするだけで十分にスマートです-ポインター(およびそれが指すクラスオブジェクト)を狂ったように削除してから、それとそれが指すオブジェクトを再作成しませんか?

そうでない場合、誰かがこのばかげたことを私に説明できますか?

4

2 に答える 2

1

ベクトルはポインター値をそのままにします。もちろん、プッシュ、ポップ、または消去すると、内部配列の値が移動します。

この場合、値は単なるポインターです。ただし、ベクトルには、何かがオブジェクトへのポインターであるかどうかを判断し、値がコピーされたときにそれらを削除/再割り当てするロジックはありません。

ポインターではなく複合型を含むベクターの場合、内部配列が再割り当てまたは移動されると、もちろん値をコピーしようとします。

于 2014-03-28T01:57:53.043 に答える