고유 포인터의 동작을 이해하는 데 문제가 있습니다. 내가 힙 개체 ... 그래서처럼 내 GameState 스택unique_ptr으로 만든 힙 요소가 여전히 힙에 할당 된 스택으로 이동 되었습니까?
std::unique_ptr<GameState> mMenuPtr(new MainMenu);
다음 push()
및 move()
을 ... 할당하면
gameStates.push(std::move(mMenuPtr)); //pointer loses ownership of MainMenu during move
은 여전히 동적으로 스택의 요소이다 힙에 할당 되었습니까? 그렇다면 끝 범위에서 스택을 제거하면 메모리가 new로 할당되었거나 메모리 누수를 방지하기 위해 해당 객체를 파괴하는 다른 방법이 필요합니까?
저는 unique_ptr
의 주된 목적은 할당 취소를 처리하는 것이지만 그 객체의 소유권을 잃은 것입니다. 나는 무엇을 해야할지 알 수 없다.
STL API를 보면 의 get() 함수를 사용하면 move()
을 수행 한 후 해당 객체에 다시 액세스 할 수 있으며, 그것은 내가 원하는 이유입니다. 왜냐하면 심지어 unique_ptr
이 파괴 된 후에도 여러 파일에 걸쳐 스택 요소에 액세스 할 수 있기를 원하기 때문입니다.하지만 그 일을 수행하는 가장 이상적인 방법은 무엇입니까?
좋아요? release
가 호출되지 않는 한
GameState* statePtr = sScreen.get();
그걸 명확히하기 위해 ... 스택을 파괴하면 나에게 할당 된 GameState가 처리 될 것입니까? – PrimRock
예, 모든 요소의 소멸자를 호출합니다.이 요소는이 unique_ptr이되며,이 요소는 소멸자를 요소에서 호출합니다 (또는 NULL 인 경우에는 아무것도 표시하지 않습니다). –