inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

타입 변환 #5

자식 리소스 접근

185

문희찬

작성한 질문수 28

0

class Item { int _itemType=0;}

class Weapon: public Item { int _attack=2; }

라고 클래스를 정의할 때

Item* item = new Weapon();

이라고 선언한다면

item->_attack에 접근이 불가능합니다.

---- 질문1 -----

item->_attack에 접근하는 가장 현실적인 방법은 

Weapon* weapon = (Weapon*)item; 

새로운포인터를 선언하여 weapon->_attack으로 접근하는 것인가요?

---- 질문2 ----

virtual 소멸자 선언을 하지 않았을 경우, delete item; 는 Item에 대한 소멸자만 호출할 뿐 Weapon의 소멸자를 호출하지 않습니다. 그럼 힙영역에서 _itemType만 해제되고 _attack타입의 크기만큼 메모리 누수가 일어나나요? 

C++

답변 3

2

Rookiss

1.

새로운 포인터를 선언하는건 필수 사항은 아니고,
일단 변환(캐스팅)을 해주면 됩니다.

((Weapon*)item)->_attack;

2.
그렇지는 않습니다.
Weapon 소멸자가 호출되지 않는 것은 맞지만
new 할 때, 할당 크기는 이미 힙 영역의 헤더에 들어가 있고
delete할 때는 그 정보를 토대로 메모리 정리가 이루어지기 때문에
전체 메모리 영역이 정상적으로 날라갑니다.
이를 가장 쉽게 테스트 할 수 있는 방법은 계속 new / delete를 무한 반복하고 
메모리 점유가 높아지는지를 확인하시면 됩니다.

문제의 상황은 Weapon class 자체에서 별도로 new를 한 애를 들고 있고,
이를 Weapon 소멸자에서 delete를 하는 등의 상황인데
이런 경우라면 그 객체가 소멸되지 않으니 메모리 누수가 일어나게 됩니다.
참고로 나중에 디버깅 연습 문제에서 이런 케이스를 확인하게 됩니다.

0

문희찬

오타가 적으신것같은데 실례가 안된다면 무슨 키보드 쓰시는지 여쭤봐도 괜찮을까요?

0

Rookiss

주기적으로 바꾸는데 요즘은 손목이랑 손가락이 너무 아파서
키압이 극도로 낮은 Realforce R2 TL 30g 모델을 사용하고 있습니다.

0

문희찬

답변해주셔서 감사합니다. 유튜브로 사용하시는 키보드 리뷰보고 구매페이지로 갔는데 가격보고 뒤로가기 눌렀네요 :)

1

Rookiss

가성비로는 바로 이전에 사용하던 cox 무접점 엠프리스 (35g) 이게 나쁘지 않았어요.

끝판왕인 realforce로 바꾸기 이전에 사용하던 키보드입니다.

0

문희찬

2번질문에 대한 가벼운 예제로 확인해보니 메모리가 부모자식할것없이(?) 싹 날라가는것을 볼 수 있었습니다. 도움을 주셔서 감사합니다. 

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

559

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

453

1

strcpy() 구현 관련 질문

0

532

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

475

1

클래스 타입의 포인터 질문합니다

0

559

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

503

1

템플릿 특수화 관련 질문

0

389

1

포인터 관련 질문합니다!

0

270

1

Unable to start assembler. Check your settings.

0

848

2

cpu선택

0

548

1

포인터 질문이 있습니다

0

331

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

589

1

iterator 삭제관련

0

414

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

316

1

15 분 45초 대 질문

0

317

0

스택 프레임 질문합니다!

2

312

1

오른값 참조 in 게임

0

391

0

동적할당 질문이 있습니다

0

457

1

안녕하세요 메모리에 대해 질문드립니다.

0

312

1

함수객체 의 매개변수

0

365

1

복사생성자

0

439

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

430

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

359

1

스택 오버플로우

2

801

1