コピーコンストラクタの形(C++)
class A { public: A(); //通常のコンストラクタ A( const A& ); //コピーコンストラクタ : };
コピーコンストラクタが動作するケース
- 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の戻り値がオブジェクト自体であれば、この時コピーコンストラクタが定義されていれば動作する }