현재 상황: 

인벤토리를 구현해서, 인벤토리간 drag&drop으로 swap을 구현하려고 하는데, 이 swap 할 데이터들 중 일부만 swap을 해야해서

어떻게 구현해야 할 지 모르겠음.

원래는 std::swap을 썻음.


일단 std::swap을 썻을 때 문제가,
Inventory가 Slot* 배열을 가지고 있는데, 

std::swap으로 둘을 바꾸게 되면 Slot* 안에 있는 각 Slot의 데이터중 위치값까지 같이 이동되서

0 1 2 3 4

5 6 7 8 9

모양으로 Slot이 그려진다고 했을때 std:;swap을 하면 이렇게 됨

1 0 2 3 4

5 6 7 8 9 

( 1 0 의 값이 바뀌지만, 위치값 또한 바뀌게 되어 마치 안바뀐 것처럼 된다는 뜻 )


그래서 std::swap을 쓰지말고, swap을 할때 일부 데이터만 바꾸고 싶음.

( Slot에 담긴 Item 만 )

그래서 https://stackoverflow.com/questions/15672805/c-swapping-pointers

를 참고하면서 구현을 해봤는데, 둘다 아이템이 사라져버리는 문제가 있음.


아래는 현재 코드임.

void Inventory::Drop()

{

//... drag&drop시 충돌한 Slot의 인덱스를 받아옴

    ChangeSlot(&itemSlots_[dragIndex_.slotIndex], &itemSlots_[dropIndex_.slotIndex]); // itemSlots_는 Slot* 배열임.

}


void Inventory::ChangeSlot(Slot* dragSlot, Slot* dropSlot)

{      

        Slot* temp;

        temp = *dragSlot;

        (*dragSlot)->SetItem((*dropSlot)->GetItem());

        (*dropSlot)->SetItem(temp->GetItem());

}

// Slot에 객체 일부

//...

    class Item* slotItem_ = nullptr; // 당연히Inventory 생성 시점에 item을 넣거나 안넣어줌.

    auto GetItem() { return slotItem_; }

//...


이 시점에서


얘내 셋다 slotItem_이 Null이 되버리는데 왜그런지 모르겠음

 ( dragSlot에 원래 item 이 있음  temp = *dragSlot; 에 종단점 넣었을 때 걸린 직후 )