• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

함수내에서의 동적할당

22.01.01 11:59 작성 조회수 213

0

여기까지 공부하다가 궁금한 점이 생겨서 여쭈어봅니다

함수내에서 new로 동적할당을 하게 된다면 어떻게 해야하나요? 

만약 Item이라는 클래스의 포인터를 반환하는 함수라면 new선언 후에 리턴값으로 이 new로 선언한 것을 반환하게 된다면 delete는 어디에서 선언해야하는 걸까요? 일단 생각해본건 return후 반한된건 new로 선언한 힙에 저장된 객체의 주소일테니 함수의 이름을 delete하는 걸로 생각하고있는데 궁금해서 여쭈어봅니다

Item* Find()

{

        Item* item = new Item();

        item->a = 100;

        return item;

}

int main()

{

    Item* it = Find();

    delete it;

    return 0;

}

답변 1

답변을 작성해보세요.

0

이 new로 선언한 것을 반환하게 된다면 delete는 어디에서 선언해야하는 걸까요?

우선 사소한 부분인데 delete는 '선언'하는게 아니라 '호출'한다고 표현해야 합니다.
delete를 하는 곳, 즉 메모리를 정리하는 곳은 어딜까요?
그것은 상황에 따라 다르고 보통 기획이랑 엮여 있습니다.
인벤토리에 아이템을 들고 있다가, 해당 아이템을 땅에 버리거나 팔면
소멸된다 가정하면, 그 시점에 delete하는 시점이 되어야겠죠.
C++에서 이런 생명주기는 굉장히 복잡하고 또 골치아픈 이슈입니다.
그래서 보통 나중에 가면 스마트 포인터를 사용하게 됩니다.