2014-09-27 3 views
0

동적으로 할당 된 메모리를 사용하는 경우 delete 명령의 유용성이 분명합니다. 프로그램에서 포인터의 메모리가 더 이상 필요하지 않으며 용도 변경이 가능하다는 것을 알 필요가 있습니다.스마트 포인터에서 메모리 해제

C++ 11의 스마트 포인터 (예 : unique_ptr)는 비슷한 목적으로 사용 된 것처럼 보이는 멤버 함수를 가지고 있습니다 (release()). 나는 똑똑한 포인터를 사용하는 것이 인데,은 수동으로 메모리의 해제를 처리해야한다고 생각했다. 이러한 맥락에서 release() 기능이 제공되는 이유는 무엇입니까?

이 범위를 벗어나거나 새로운 포인터를 할당 할 때

답변

1

unique_ptr::release은 관리 포인터에서 delete을 호출하는 것과 동일하지 않습니다. unique_ptr은 힙 할당 객체를 소유하는 유일한 엔티티를 원할 때 사용됩니다. unique_ptr::release 소유권을 포기하고 원시 포인터를 반환합니다. unique_ptr이 더 이상 관리 데이터를 소유하고 개체를 파괴하지 않으려는 경우가있을 수 있습니다. 일반 포인터를 사용하고 소유권을 갖는 기존 API를 호출하려고 할 수 있습니다. 또는 귀하의 인터페이스가 unique_ptr이 되길 원하지만 구현시 많은 shared_ptr에 액세스 할 수 있습니다. 따라서 구현은 unique_ptrrelease이고 소유권은 하나 이상의 shared_ptr으로 이전됩니다.

+0

글쎄, C++에 다소 익숙하다. 스마트 포인터는 범위를 벗어나는 경우에만 내용을 전달하고 메모리를 해제하지 않는 응용 프로그램에서만 사용했다. – Conduit

1

unique_ptr은 자동으로 메모리를 해제하지만 그 전에 메모리를 해제 할 수 있습니다 (말장난 의도) (가장 명백한 이유는 메모리 사용을 최적화 할 것).