C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++のコピー初期化と直接初期化に違いはありますか?


コピーの初期化は、コピーコンストラクターの概念を使用して実行できます。コンストラクターはオブジェクトを初期化するために使用されることがわかっています。コピーコンストラクターを作成して、他のオブジェクトのコピーを作成できます。つまり、現在のオブジェクトを別のオブジェクトの値で初期化できます。一方、直接初期化は代入演算を使用して行うことができます。

これら2種類の初期化の主な違いは、コピーの初期化により、新しいオブジェクト用に個別のメモリブロックが作成されることです。ただし、直接初期化によって新しいメモリスペースが作成されることはありません。参照変数を使用して、前のメモリブロックを指します。

コピーコンストラクタまたはコピー初期化(構文)

classname (const classname &obj) {
   // body of constructor
}

直接初期化または代入演算子(構文)

classname Ob1, Ob2;
Ob2 = Ob1;

コピー初期化と直接初期化の詳細な違いを見てみましょう。

コピーの初期化 直接初期化
コピーの初期化は基本的にオーバーロードされたコンストラクターです 直接初期化は、代入演算子を使用して実行できます。
これにより、新しいオブジェクトが既存のオブジェクトで初期化されます これにより、あるオブジェクトの値が、両方ともすでに存在する別のオブジェクトに割り当てられます。
コピーの初期化は、既存のオブジェクトを使用して新しいオブジェクトを作成するときに使用されます これは、既存のオブジェクトを新しいオブジェクトに割り当てたい場合に使用されます。
両方のオブジェクトが別々のメモリ位置を使用します。 1つのメモリ位置が使用されていますが、異なる参照変数が同じ位置を指しています。
クラスでコピーコンストラクターが定義されていない場合、コンパイラーはコピーコンストラクターを提供します。 代入演算子がオーバーロードされていない場合、ビット単位のコピーが作成されます

  1. C++の「struct」と「typedefstruct」の違いは?

    C ++では、structとtypedef structの間に違いはありません。これは、C ++では、すべてのstruct / union / enum/class宣言が暗黙的にtypedefであるかのように動作するためです。 ed、同じ名前の別の宣言によって名前が隠されていない限り。 typedefを前方宣言できないという微妙な違いが1つありますが、したがって、typedefオプションの場合、どこでも使用する前に、typedefを含むファイルを含める必要があります。

  2. C++文字列定数と文字定数の違い

    C ++では、一重引用符で囲まれた文字は文字リテラルです。文字型です。たとえば、「a」は、ASCIIベースのシステムでは値97のchar型です。 二重引用符で囲まれた1文字または文字列は、文字列リテラルを表します。これはconstchar[]型であり、文字列の長さ+1のサイズの配列を参照します。その余分な文字は文字列の終わりを示すためにあります。 文字列リテラルは、「abcdefg」のように任意の長さにすることができます。文字リテラルには、ほとんどの場合、1文字だけが含まれます。これらが印刷されるとき、文字列リテラルは、文字列で最初の\0またはNULL文字が検出されるまで印刷されます。