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의 클론() 함수가 필요합니다 : 클래스 SomeClass { 공개 :
SomeClass* clone() const
{
return new SomeClass();
}
};
을
예, 가능합니다.하지만 코드를 게시하면 아무 것도 배울 수 없습니다. 자신을 시험해보고 문제가 있으면 게시하십시오. – zennehoy
http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29 – DGomez
일반적인 패턴은 대입 연산자 (복사 및 스왑)에서 복사 생성자를 사용하는 것이지 다른 방법은 사용하지 않는 것입니다. 복사 생성자에서 할당 연산자를 사용하려면 하위 연산자 인 대입 연산자를 사용하기 전에 멤버 변수를 만들어야합니다. – syam