effective c++オブジェクトをコピーするときは、各成分を忘れないでください.

1151 ワード

コピーコンストラクタを自分で定義するときは、派生クラスはベースクラスの成分をコピーすることに注意してください.
class Base
{
private:
    int baseData;
};
class Derived : public Base
{
public:
    Derived(const Derived& c)
    :Base(c),
     derivedData(c.derivedData){}
    Derived & operator=(const Derived& c)
    {
        Base::operator=(c);
        derivedData = c.derivedData;
        return *this;
    }
private:
    int derivedData;
};

copy assignmentオペレータにcopyコンストラクション関数を呼び出すのは合理的ではありません.これは既存のオブジェクトを構築しようとしているようにします.
copyコンストラクション関数にcopy assignmentオペレータを呼び出すのも意味がありません.コンストラクション関数は新しいオブジェクトを初期化するために使用されますが、copy assignmentは初期化されたオブジェクトにのみ実行されます.