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

配列メンバーはC++で深くコピーされていますか?


C / C ++の場合、構造体(またはC ++のクラスのみ)変数を同じ型の別の変数に割り当てることができます。構造体変数を別の変数に割り当てるときに、変数のすべてのメンバーが他の構造体変数にコピーされます。この場合、構造が配列で構成されているとどうなるかという疑問が生じます。

次に、配列について説明する必要があります。注意すべき主な点は、配列メンバーは浅いコピーとしてコピーされないということです。配列メンバーの場合、コンパイラは自動的にディープコピーを実行します。以下のプログラムでは、structtestは配列メンバーstr1[]で構成されています。 st1をst2に割り当てることができる場合、st2には配列の新しいコピーがあります。したがって、st1のstr []を変更または変更しても、st2は変更または変更されません。

# include <iostream>
# include <string.h>
using namespace std;
struct test{
   char str1[20];
};
int main(){
   struct test st1, st2;
   strcpy(st1.str1, "Tutorial Point");
   st2 = st1;
   st1.str1[0] = 'X';
   st1.str1[1] = 'Y';
   /* Because copy was Deep, both arrays are different */
   cout<< "st1's str = " << st1.str1 << endl;
   cout<< "st2's str = " << st2.str1 << endl;
   return 0;
}

出力

st1's str = XYtorial Point
st2's str = Tutorial Point

したがって、C ++クラスの場合、デフォルトの動作は配列のディープコピーであるため、配列メンバー用に独自のコピーコンストラクターと代入演算子を作成する必要はありません。


  1. C++での並べ替え

    このセクションでは、C++で並べ替えアルゴリズムを実行する方法を説明します。並べ替えられた配列は、各要素が数値、アルファベット順などの順序で並べ替えられた配列です。バブルソート、挿入ソート、選択ソート、マージソート、クイックソート、ヒープソートなど、数値配列をソートするための多くのアルゴリズムがあります。選択ソートを使用した配列のソートの詳細については、以下を参照してください。 選択ソートは、ソートされた配列を生成するソート方法です。これは、配列内の最小の要素を繰り返し見つけて、ソートされていない部分の先頭にある要素と交換することによって行われます。 選択ソートを使用してソートされた配列を

  2. 静的C++クラスメンバーはいつ初期化されますか?

    静的C++クラスのメンバーは、staticキーワードを使用して定義できます。クラスのオブジェクトの数に関係なく、メモリには静的クラスメンバーのコピーが1つしかないため、クラスの静的メンバーはすべてのクラスオブジェクトで共有されます。 静的クラスメンバーは、他の方法で初期化されていない場合、クラスの最初のオブジェクトが作成されるときにゼロに初期化されます。 C++で静的クラスメンバーを示すプログラムは次のとおりです。 例 #include <iostream> using namespace std; class Example {    public : &