2010-05-22 2 views
0

클래스 1과 클래스 2가 있고 클래스 1에 대한 얕은 복사본 생성자가 필요합니다. Class1에는 Class2 인스턴스를 가리키는 포인터 인 멤버 변수가 있습니다. 또한 Class2 ptr을 가리 키도록 변경할 수 있어야합니다.클래스의 포인터를 전달하십시오.

class Class1 
{ 
    Class2* ptr; 
    ... 
} 

소스 파일 : 헤더 파일

때 이제

Class1::Class1() 
{ 
    ptr = new Class2(); 
} 

...... 

Class2* Class1::Exchange(Class2* newClass2) 
{ 
    Class2* temp; 
    ptr = newClass2; 
    return temp; 
} 

...... 

는, 내가 원하는 지금

Class1 original; 
Class1 shallowCopy(original); 

Class2* newClass2 = new Class2(); 
Class2* oldClass2; 

oldClass2 = orignal.Exchange(newClass2); 
delete oldClass2; 

이 shallowCopy.ptr와 연관 original.ptr라고 얕은 복사 생성자를 구현하면 어떻게이 두 포인터가 항상 같은 Class2를 가리키는 지 확인할 수 있습니까? 위의 클래스에서 oldClass2가 삭제됨을 의미하므로 shallowCopy의 ptr이 아무 것도 가리키지 않습니다. oldClass2를 삭제하지 않으면 원본 및 shallowCopy의 ptrs가 다른 Class2 인스턴스를 가리키고 있습니다.

답변

3

참조 계산을 사용하여 포인터를 공유하고 특히 Boost의 shared_ptr 클래스를 살펴볼 수 있습니다.

관련 문제