副本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的 { 市民:
SomeClass* clone() const
{
return new SomeClass();
}
};
是的,你可以,是的,这是可能的,但如果我们发布代码给你,你将不会学到任何东西。试试你自己并发布你可能遇到的任何问题。 – zennehoy
http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29 – DGomez
通常的模式是在赋值运算符(复制和交换)中使用复制构造函数,而不是其他方式。在复制构造函数中使用赋值运算符需要构造成员变量,然后才能使用低效的赋值运算符。 – syam