ビデオ: C++ Battery Collector: Extending the Character Class | 09 | v4.9 Tutorial Series | Unreal Engine 2024
コンストラクタは、オブジェクトが自身を初期化できるようにオブジェクトが作成されたときにC ++が自動的に呼び出す特殊な関数です。 コピー および 移動コンストラクタとして知られるコンストラクタには、2つの特定のバリエーションがあります。
コピーコンストラクタは、C ++がオブジェクトのコピーを作成するために使用するコンストラクタです。 X::X(const X&)という名前を持ちます。ここで X はクラスの名前です。つまり、 X クラスのコンストラクタであり、 X クラスのオブジェクトへの参照を引数として取ります。これは本当に役に立たないようですが、なぜC ++にそのようなビーシーが必要なのかを調べるのにちょっと時間がかかるだけです。
次のような関数を呼び出すと何が起こるかを考えてみましょう。
void fn(Student fs){// …同じシナリオです。異なる引数…} int main(int argcs、char * pArgs []){Student ms; fn(ms); return 0;}
fn()の呼び出しでは、C ++はオブジェクト ms のコピーを渡し、オブジェクト自体は渡しません。
オブジェクトのコピーを作成することが何を意味するかを検討します。まず、オブジェクトを作成するコンストラクタ、既存のオブジェクトのコピーを取得します。 C ++では、既存のオブジェクトを新しいオブジェクトに1バイトずつコピーするデフォルトのコピーコンストラクタを作成できます。
<! - 2 - > <! --1 - >これはC言語のような古い言語と同じです。しかし、クラスがオブジェクトの単純なコピーを望んでいない場合はどうなりますか?何か他のものが必要な場合はどうなりますか? (「なぜ?」を無視してください。)クラスは、コピーの作成方法を正確に指定できる必要があります。
したがって、C ++は前の例のコピーコンストラクタを使用して、関数fn()の呼び出し中にスタック上にオブジェクト ms のコピーを作成します。この特定のコピーコンストラクタは、Student::Student(Student&) - 3回すばやく言います。