シングルトンのプログラムを書いてる時に、コピーコンストラクタを書かなくてはいけなかったので、備忘録としてまとめておきます。
コピーコンストラクタとは
その前にコンストラクタとは
「コンストラクタ」とは、クラスオブジェクトを生成したときに呼び出される初期化を行うためのメンバ関数でした。
https://monozukuri-c.com/langcpp-copyconstructor/
では改めて、コピーコンストラクタとは
同じクラスのオブジェクトを使って初期化するときに呼ばれるメンバ関数
https://monozukuri-c.com/langcpp-copyconstructor/
初期化するっていうのが重要ポイントですね。私は初期化と代入の違いについてちゃんと理解できていませんでした。
初期化:変数定義と同時に値を入れること
代入:定義済みの変数に値を入れること
初期化のときに定義した型分だけメモリ確保に動くことができるんですよね。
なぜ必要なのか?
このように初期化時に呼び出されるので、コンストラクタで、ポインタなど動的メモリを確保しているときに必要になります。
詳しくは以下の「コピーコンストラクタが必要な理由」をご覧ください。とてもわかりやすくまとまっています!

C++ コピーコンストラクタ【オブジェクトを使った初期化方法】
C++のコピーコンストラクタは、同一クラスのオブジェクトを利用した初期化です。コピーコンストラクタがなぜ必要になるのかを学びましょう。
どちらにせよ、プログラムを書く時はコピーコンストラクタを定義しておくのが無難ってことですね。
なくても動くのですが、書いておけばこのような動的メモリを確保している場合のことも忘れずにすみますね。
代入時はどうなるの?
コピーコンストラクタは初期化時に呼び出されます。では、代入はどうなるのか?
代入は演算子オーバーロードを使って実現します。こちらもシングルトンのプログラムを書いて触れたので、また記事にしたいと思います!
まとめ
コピーコンストラクタをまとめました。コンストラクタで動的メモリを確保するときは、コピーコンストラクタでも動的メモリを確保し忘れないよう注意しましょう。

にほんブログ村に参加しております!よろしければクリックお願いします 🙂

にほんブログ村
コメント