コピーコンストラクター |
辞書:電算用語の基礎知識 プログラミング仕様編 (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; // ただの代入
デフォルトコピーコンストラクター |
通常のコンストラクターと同様、明示的にデフォルトコピーコンストラクターを用意しなかった場合にはコンパイラーが暗黙のうちにコピーコンストラクターを用意する。これをデフォルトコピーコンストラクターという。
その動作は単純で、単にクラスのメンバーをコピーしているだけである。
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |