構造体やクラスのインスタンスを直接関数の引数に渡したり, 関数の返値にしたりする場合を考えてみよう.
さっき定義したPointには引数のないコンストラクタが 定義されていないので,このままだとPoint qの部分がエラーになるが, それはここでは置いておく.Point home(Point x) { x.move_to(0,0); return x; } ... Point p(10,20,1); Point q = home(p);
この例で,home(p)を呼び出す場合,次のような処理が行われている.
class Point : public GraphicObject { .... public: Point(Point& x); // コピーコンストラクタ };
コピーコンストラクタは,自分と同じ型への参照を引数として持つ. クラス定義の中でコピーコンストラクタを定義しない場合,「各メンバ 変数の値をそれぞれコピーする」という動作をするコピーコンストラクタが 暗黙に定義される.それではすまない場合は,コピーコンストラクタを 自分で定義しなくてはならない.