함수내에서의 동적할당
292
작성한 질문수 1
여기까지 공부하다가 궁금한 점이 생겨서 여쭈어봅니다
함수내에서 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++에서 이런 생명주기는 굉장히 복잡하고 또 골치아픈 이슈입니다.
그래서 보통 나중에 가면 스마트 포인터를 사용하게 됩니다.
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
560
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
453
1
strcpy() 구현 관련 질문
0
536
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
475
1
클래스 타입의 포인터 질문합니다
0
559
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
503
1
템플릿 특수화 관련 질문
0
390
1
포인터 관련 질문합니다!
0
271
1
Unable to start assembler. Check your settings.
0
849
2
cpu선택
0
549
1
포인터 질문이 있습니다
0
331
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
589
1
iterator 삭제관련
0
415
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
316
1
15 분 45초 대 질문
0
317
0
스택 프레임 질문합니다!
2
312
1
오른값 참조 in 게임
0
391
0
동적할당 질문이 있습니다
0
457
1
안녕하세요 메모리에 대해 질문드립니다.
0
312
1
함수객체 의 매개변수
0
366
1
복사생성자
0
439
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
430
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
359
1
스택 오버플로우
2
801
1





