작성
·
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
이것은 기획 정책에 따라 다른데요.
인벤토리에서는 뺐지만, 아이템은 필드나 다른 곳에 있는다거나
뭐 그런 경우 때문에 인벤토리에서 삭제할지는 상황에 따라 다릅니다.
나중에 스마트 포인터를 사용하면 사실 이런 부분은 굳이 신경쓸 필요가 없어집니다.
답변 감사드립니다.^^
어떤 의도인지 정확히 이해했습니다.