인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

무큐님의 프로필 이미지
무큐

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

함수 포인터 #1

함수내에서의 동적할당

작성

·

263

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

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

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

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

무큐님의 프로필 이미지
무큐

작성한 질문수

질문하기