copy ctor と op= の本体は、リソースの保存方法 (a1 変数と a2 変数) によって異なります。それらを別のクラスにコピーする必要がある場合は、 SomeClass オブジェクトの完全なコピーを作成する関数を作成する必要があります。別のケース - 単純にポインタ値をコピーできますが、その使用方法、特に削除には十分注意してください。リソース共有の問題に対する最も簡単な解決策は、boost::shared_ptr や c++11 std::shared_ptr などのスマート ポインターを使用することです。
したがって、リソースをコピーする場合:
class DerivedClass : public BaseClass {
SomeClass* a1;
Someclass* a2;
public:
// note: do not forget to assign zeroes to your pointers, unless you use some kind of smart pointers
DerivedClass()
:a1(0), a2(0){}
DerivedClass(const DerivedClass& d)
:a1(0), a2(0)
{
*this = d;
}
DerivedClass& operator=(const DerivedClass& d)
{
if (this == &d)
return *this;
delete a1;
a1 = d.a1->clone();
delete a2;
a2 = d.a2->clone();
return *this;
}
//constructors go here
~DerivedClass() { delete a1; delete a2;}
// other functions go here ....
};
オブジェクトをコピーする SomeClass の clone() 関数も必要です。
SomeClass* clone() const
{
return new SomeClass();
}
};