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() 函数,该函数将复制您的对象: class SomeClass { public:
SomeClass* clone() const
{
return new SomeClass();
}
};