임베디드 시스템에서 응용 프로그램을 계속 실행해야합니다. 이 응용 프로그램을 구현하는 동안 Heap에서 많은 메모리를 할당해야합니다. 그 사람들을 위해 auto_ptr을 사용하면 언제 해제 될까요? 내 이해에 따라, 자동 포인터로 지적 된 메모리는 응용 프로그램을 종료하거나 종료 할 때 해제됩니다. 신청서가 종료되지 않으면 자동으로 해제되지 않습니다. reset()을 사용하여 아래와 같은 메모리를 확보 할 수 있습니다.응용 프로그램을 종료하지 않을 경우 auto_ptr 누출로 인해 메모리가 가리 킵니까?
auto_ptr<Test> testPtr(new Test);
testPtr.reset();
그러나 이렇게하면 auto_ptr의 목적이 무너질 수 있습니다. 내가 모든 장소에서 reset()을 할 수 있다면, 나는 모든 장소에서도 delete를 할 수있다.
Pls는 응용 프로그램이 종료되지 않아도 auto_ptr이 가리키는 메모리가 해제되는지 여부를 알려줍니다. 그렇지 않다면, reset()을 호출하는 것 외에 다른 방법으로 메모리를 확보 할 수 있습니까?
편집 : 내 경우에는 auto_ptr 클래스 내에 있습니다. 이 클래스 객체는 응용 프로그램을 종료 할 때만 파기됩니다. 응용 프로그램이 무한대로 실행되므로 클래스 객체가 파괴되지 않습니다. 그러므로 문제. Pls도 이것을 고려합니다.
편집 : 답변 : 다른 개체를 저장하기 위해 동일한 auto_ptr을 사용하고 있기 때문에 매번 할당 할 때 auto_ptr 할당 연산자가 이전 개체 삭제를 처리합니다. 리셋을 요구하지 않아도 누출이 없습니다.
이것은 auto_ptr 인스턴스가 포함 된 클래스의 디자인에 문제가있는 것으로 보입니다. auto_ptr 인스턴스에 할당 된 힙 메모리의 수명 기간에 대한 규칙을 설명하면 도움이 될 것입니다. – Henk