1

重複の可能性:
ディープコピーとシャローコピー
overloading operator =とオーバーロードコピーコンストラクターの違いは何ですか?

クラスをコピーする方法は2つあります。

  1. コピーコンストラクタ

  2. 演算子=

私の質問は、動的に割り当てられたメモリの新しいコピー(同じデータを持つ2つのクラスと動的メモリの2つのインスタンス)を作成し、クラスを新しいメモリ位置(同​​じ動的に割り当てられたメモリを持つ1つのクラス)に移動する必要があるかどうかです。しかし、クラスは別の場所にあります)?

4

2 に答える 2

1

コピーコンストラクターは、新しいオブジェクトを作成し、既存のオブジェクトに基づいてその状態を初期化します。

A x(y); // x is now in the same state as y

代入演算子は既存のオブジェクトを取得し、その状態を変更して別の既存のオブジェクトと一致させます。

A x; // x is in the default state
x = y; // x is now in the same state as y

州についてどのような決定を下しても、両方に等しく適用する必要があります。

于 2012-10-24T13:34:05.807 に答える
0

コピー コンストラクターを介して変数を宣言できるため、両方を実装する必要があります。変数に代入できます。例えば:

Class a; //some heap allocations inside
Class b(a); //must be valid
Class c = a; //must be valid too

そして、デストラクタを忘れないでください。簡単な方法は、コピーと割り当て演算子を実現することです。割り当て時にコピーを使用してから、スワップ(コピーとスワップ)します。コピー & スワップ3 のルール

于 2012-10-24T13:18:24.970 に答える