나는 작은 질문이있다 :동일한 포인터 가변 메모리 누수에 대한 복사 생성자의 반복 호출?
Foo *myFoo;
myFoo = new Foo(anotherFoo); // some deep copy of another object
myFoo = new Foo(yetAnotherFoo); // another deep copy of yet another object
이것은 메모리 누출인가? 그렇다면 어떻게 제대로 피할 수 있는가? 내 프로그램의 상황은 'myFoo'가 클래스 멤버이기 때문에 복사 된 객체가 수정되기 때문에 때때로 다른 객체의 전체 복사본에 대해 "유일 한"저장 객체로 사용하려고합니다. 나중에 비교를 위해 초기 객체가 필요함).
다음과 같은 간단한 해결 방법을 시도했습니다.
// within a class method of the same class
if (myFoo!=NULL) delete myFoo;
myFoo = new Foo(fooToStore);
이 프로그램은 소멸자가 호출되자 마자 충돌합니다. 내 (평범하지 않은) 소멸자가 약간 버그가 있는지 (여기에서 논의 할 다른 문제) 또는 클래스 메소드 내에서 삭제를 통해 클래스 멤버 객체를 삭제하는 것이 일반적으로 금지되는지 확실하지 않습니다.
시간과 도움을 많이 주셔서 감사합니다 - 감사합니다!
을 표시하십시오.
Sidenote : 삭제를 호출하기 전에 myFoo가 NULL인지 확인해야하며, 삭제는 NULL 값을 올바르게 처리합니다. – larsmoa