|
コピーコンストラクタ
オブジェクトの代入を行うと、全てのメンバがビット単位でコピーされる初期化が行われます。
これを回避するために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;
}
|