2010-08-23 2 views
1

, 즉할당 된 메모리를 두 번 삭제하지 않으려면 어떻게해야합니까? 나는 동적으로 할당 된 객체에 대한 포인터를 포함하는 객체가있는 경우, 다음 같은 유형의 다른 개체에 할당 예를 들어

object2 = object1; 

와 소멸자가 명시 적으로 동적으로 할당 된 객체를 삭제합니다. 따라서 object2와 object1이 범위를 벗어나면 오류가 발생합니다. 동적으로 할당 된 객체의 주소가 두 번 삭제되기 때문에 오류가 발생합니다. 그렇다면이 문제를 수정/피하기 위해 무엇을해야합니까?

답변

0

나는 이것이 C++라고 추측하고 있습니까? 어떤 경우에는 smart pointers을보십시오. 참조 횟수 (boost :: shared_ptr)는 이런 종류의 문제를 해결하는 데 도움이됩니다.

0

object1의 모든 비트를 object2에 복사했기 때문에 피할 수 없습니다. 같은 장소에 두 포인터가 있지만 두 개체가 있기 때문에 소멸자가 두 번 호출됩니다.

fisrt 솔루션은 object2의 소멸자의 호출을 방지 할 수 있습니다 :

char object2_data[sizeof(object1)]; 
Type* object2 = (Type*) object2_data; 
*object2 = object1; 
... 
object1.do_something(); 
object2->do_something(); //However, the pointer is different 

두 번째 방법은 객체를 재 설계와 객체가 사본 인 경우 말할 것이다 부울 변수를 추가하는 것입니다. 복사물 인 경우 개체를 삭제할 때 포인터를 삭제하지 마십시오. 마지막으로 복사 생성자를 구현하고 연산자 =를 오버로드하여 객체를 복사하고 bool 변수를 설정하여 사본임을 알립니다. 그러나 원본 개체를 삭제하면 잘못된 포인터가 있으므로 복사본을 사용할 수 없습니다.

관련 문제