인프런 커뮤니티 질문&답변

개멋져!님의 프로필 이미지
개멋져!

작성한 질문수

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

인벤토리

RemoveItem 함수에서 아이템 포인터를 nullptr로 바꾸기 전에 delete를 하지 않는 이유가 있나요?

작성

·

223

0

강의에 나온 예제 에서는 Clear 함수로 모든 아이템을 delete하는데 이때 RemoveItem 함수에서 이미 nullptr로 지정된 아이템은 따로 delete 연산을 하지 않아서 Clear 이후에 배열의 포인터는 nullptr인데 힙 메모리에는 데이터가 남는 게 아닌가 싶어서 질문 드립니다.

실제로 RemoveItem을 실행하는 아니템들을 따로 배열에 모아 Clear 함수 이후에 데이터를 확인해 보니 아이템들이 존제하는 것을 확인 했습니다.

bool Inventory::RemoveItem(Item* _item)

{

if (_item == nullptr)

return false;

int slot = FindItemSlot(_item);

if (slot < 0)

return false;

//delete mItem[slot];

// 제거되는 아이템 모음

mRemove[mRemoveIndex] = mItem[slot];

mRemoveIndex++;

mItem[slot] = nullptr;

mItemCount--;

return true;

}

위에 mRemove에 아이템을 모아 Clear 이후에 중단점을 걸어 데이터를 확인해 보니 아이템의 데이터가 남아있는 것을 확인했습니다.

혹시 의도적의로 delete연산을 하지 않은 것 인지 궁금하여 질문 드립니다.

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

이것은 기획 정책에 따라 다른데요.
인벤토리에서는 뺐지만, 아이템은 필드나 다른 곳에 있는다거나
뭐 그런 경우 때문에 인벤토리에서 삭제할지는 상황에 따라 다릅니다.
나중에 스마트 포인터를 사용하면 사실 이런 부분은 굳이 신경쓸 필요가 없어집니다.

개멋져!님의 프로필 이미지
개멋져!
질문자

답변 감사드립니다.^^

어떤 의도인지 정확히 이해했습니다.

 

개멋져!님의 프로필 이미지
개멋져!

작성한 질문수

질문하기