' P '

whatever I will forget

C++ Copy Constructor

Copyコンストラクタの必要性がいまいちわかっていない。。。 クラスのメンバ達の値を新しいオブジェクトにコピーするって感じで合ってるのやら。。

とりあえず、Copyコンスラクタの定義です。

class Sample {
private:
    char a {"wawawa"};
    char b;
    char c;
public:
    //copy constructor prototype
    sample (const Sample &source);
    //destructor
    ~sample();
}

Sample::Sample (const Sample &source) 
    : a{source.a}, b{source.b}, c{source.c} {
}

上記みたいな感じで、クラス名のconstリファレンスって感じ。

なんか例えば、下記みたいに、

void some_method(Sample p) {
     cout << p.a << endl;
}

//Copy Constructor
Sample::Sample (const Sample &source) 
    : a{source.a}, b{source.b}, c{source.c} {
}

int main() {
     Sample xxx;
     some_method(xxx);

って存在した場合、some_methodで渡されたSampleクラスのxxxは、まずsome_method内の引数であるpにコピーされる。 その時点で呼び出されるのがコピーコンストラクタとなる。って流れ
また、some_methodのスコープ外になったら、ちゃんとデストラクタも動きます。pオブジェクトを消さないといけないからです。
まあ、なんとなくクラスを関数に渡す際なんかに、役に立つものなのかな?って感じで消化したのですが、
関数をcallした時に値をそのまま渡した際に役立ちそうっぽいですね。(リファレンスやポインタで値を渡さない場合)