![]() |
![]() |
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. |