通信用語の基礎知識 日本文化チャンネル桜二千人委員会 戻る

通常PC用 / 人気 更新 今日 カテ
電子計算機 > 仕様・構造 > ソフトウェア > プログラミング言語 > 言語仕様 > オブジェクト
コピーコンストラクター
辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS)
読み:コピーコンストラクター
外語: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++
コンストラクター
関連する用語
インスタンス

[再検索] [戻る]


通信用語の基礎知識検索システム WDIC Explorer Ver 7.03 (16-May-2019)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club
KisoDic