2

そのため、c++ はクラスの自動コピー ctor を生成します。クラスにポインターが含まれているとどうなりますか? 私の大学でこれをテストしたばかりで、混乱したことに、ポインターを含むオブジェクトをコピーでき、ポインターが分割されていました。

obj a;
a.push(20);
a.push(100);
obj b = a;
b.pop();
b.push(500);

a には 20, 100 が含まれ、b には 20,500 が含まれていますが、値 (20,100,500) はポインターを使用してリンクされたリストに格納されています。そんなことがあるものか?

4

2 に答える 2

0

ポインターは単純なコピー可能な値であり、それがクラスの暗黙的なコピー コンストラクターがそれらを処理する方法です。これは、指しているオブジェクトをコピーしないため、「浅い」コピーと呼ばれることがあります。

「所有権」セマンティクスをポインターにアタッチする場合は、それを含むクラスの独自のコピー/移動操作を記述するか、既存のスマート ポインター クラスを使用してそれを行う必要があります。

たとえば、この場合、unique_ptrあるリストから別のリストにノードがコピーされるのを防ぐために使用できます (リスト内外へのノードの移動は許可します)。または、独自のコピー コンストラクターと代入演算子を記述して、ポインターだけでなく、ポイントされているノードをコピーして、「深い」コピー セマンティクスを取得することもできます。

于 2013-05-27T13:21:13.877 に答える