ためになるホームページ お問い合わせ




TOP > C++ > コピーコンストラクタ
コピーコンストラクタ
オブジェクトの代入を行うと、全てのメンバがビット単位でコピーされる初期化が行われます。
これを回避するためにC++ではコピーコンストラクタが用意されており、自分で初期化を定義する事が可能です。オブジェクトの利用の注意点の最初の例では、デストラクタが呼ばれた時、解放したアドレスを再度開放しようとします。
コピーコンストラクタを使用して、初期化を自分で定義します。
※コピーコンストラクタはインスタンス生成時にしか呼ばれないので、生成後にオブジェクトの代入してもコピーコンストラクタは呼ばれません。

コピーコンストラクタの例
#include <iostream>
using namespace std;

class parentC
{
  int privateA;
  int *privateB;
public:
  parentC();
  parentC(const parentC &obj);
  ~parentC();
  void show();
  void set(int a);
};

parentC::parentC()
: privateA(0)
{
  privateB = new int[2];
}
/*コピーコンストラクタ*/
parentC::parentC(const parentC &obj)
: privateA(3)
{
  privateB = new int[2];
}
parentC::~parentC()
{
  delete[] privateB;
}

void parentC::show()
{
  cout << "privateA = " << privateA << endl;
  cout << "addr privateB = " <<  privateB << endl;
}

void parentC::set(int a)
{
  privateA = a;
}

int main()
{
  parentC parentA;
  cout << "parentAのprivateAに値をセットします" << endl;
  parentA.set(3);

  cout << "parentAのメンバ変数の値を表示します" << endl;
  parentA.show();
  parentC parentB = parentA;
  cout << "parentBのメンバ変数の値を表示します" << endl;
  parentB.show();
  return 0;
}







Copyright 2007 ためになるホームページ All Rights Reserved.