オブジェクト指向:コピーコンストラクタ

コピーコンストラクタの形(C++

class A { public: A(); //通常のコンストラクタ A( const A& ); //コピーコンストラクタ : };

コピーコンストラクタが動作するケース

  1. x; A y = x; //ここでコピーコンストラクタがはたらいでyのオブジェクトが初期化される

似ているがコピーコンストラクタが動作しないケース

A x; A y; y = x; //これはコンストラクト時ではないのでコピーコンストラクタは動かない

なぜコピーコンストラクタが必要になるのか

「A x = y;」みたいな書き方をしないならばコピーコンストラクタは不要だと思いがちですが、そうでもないです。例えば、下記の場合、コピーコンストラクタが必要になります。

void hoge( A obj ){...}

main(){

A a;

hoge( a ); //★関数hoge内の仮引数objが初期化されるがこの時コピーコンストラクタが定義されていれば動作する

}

他にも

A hoge( void ) { A obj; return obj; }

main(){ A x = hoge(); //★関数hogeの戻り値がオブジェクト自体であれば、この時コピーコンストラクタが定義されていれば動作する }