コピーコンストラクター

読み:コピーコンストラクター
外語:copy constructor 英語
品詞:名詞

C++において、インスタンスがコピーされるときに呼び出されるコンストラクター

目次

あるクラスのインスタンスとしてobj1が定義されたとし、同じクラスでobj2を定義する際に、次のようにobj1を使って初期化するとする。

CExample obj2 = obj1;

この時、コピーコンストラクターが呼び出される。

定義

名前は、通常のコンストラクターと同様にクラス名とする。

通常のコンストラクターとの区別は、引数で行なわれる。

引数は、そのクラス自身のインスタンスを参照渡しで受け取るようにし、更にconstが指定される。

class CExample {

public:

CExample(const CExample &obj); // コピーコンストラクター

};

処理は、次のように書かれる。

CExample::CExample(const CExample &obj)

{

...

}

目的

コピーコンストラクターが存在する理由は、二度初期化されることを避けるためである。

最初の例にあるように、

CExample obj2 = obj1;

とした場合、理論上は、obj2が宣言された時点で初期化され、更にobj1の値を使って初期化され、都合二回初期化されることになる。しかしそうであれば、最初のobj2の初期化は完全に無駄となる。このような無駄を避けるため、この場合はコピーコンストラクターが一回だけ呼び出される。

なお、この式は「代入」ではない。次のように書けば代入になるが、この場合はコピーコンストラクターは呼び出されない。

CExample obj2; // obj2のコンストラクターが呼ばれる

obj2 = obj1; // ただの代入

デフォルトコピーコンストラクター

通常のコンストラクターと同様、明示的にデフォルトコピーコンストラクターを用意しなかった場合にはコンパイラーが暗黙のうちにコピーコンストラクターを用意する。これをデフォルトコピーコンストラクターという。

その動作は単純で、単にクラスのメンバーをコピーしているだけである。

用語の所属
C++
コンストラクター
関連する用語
インスタンス

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club