コピーコンストラクタ - 基礎だけど大事なこと
最近はpython, javaばっかりでたまにc/c++をさわると、いろいろ覚えたことや
50%ほど理解していたのものが、(理解度が)薄まっていることにきずく。
皆様もきっとこんな経験があるはずだ。
今日、まさにそれに当たるのがコピーコンストラクタだ。
コピーコンストラクタを作る理由としては、
1. クラスのメンバーにポインタがある場合、コピー時にそのポインタを渡さない為。(異なるオブジェクトが同じ参照先を指すのは、deleteしてしまったときにエラーの原因になる。もちろん、それが意図した造りならいいんだけど。)
2. AObject a; AObject b = a;
コピーコンストラクタを実装してない状態で、
上を実行したとき、bはまずディフォルトコンストが呼ばれて、その次にaでまたinitilazeされることになる。計2回よばれて
ぬだだね。
コピーコンストラクタを実装した場合はbをいきなりaで初期子てくれてるので、効率的。
コピーコンストラクタを作る意味はこのような基本的なことにも使われているんだーなー、と実感。
一つ訂正。
コピーコンストラクタは自分で定義しなくてもコンパイラが自動的につくってくれます。
ただし、そのコピーコンストラクタはメンバーをそのままコピーするだけのものになります。
http://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html
いつ呼び出されるの???
コピーコンストラクタは、オブジェクトの初期化時に呼び出されるもので
宣言時、引数、戻り値の3つの動作でコピーがとられた時に実行されます
コピーコンストラクタは代入では作用しないので注意してください宣言時、引数、戻り値の3つの動作でコピーがとられた時に実行されます
http://wisdom.sakura.ne.jp/programming/cpp/cpp17.html