inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

스마트 포인터 (smart pointer)

스마트포인터 25분 근처

281

JM

작성한 질문수 14

0

같은부분 해봤습니다

visual studio 2022버전이고

컴파일러는 c++ 20 버전입니다

 

주석 단 것처럼 되는데 수업중 설명하고 다른거같습니다

출력하면 소멸되었다는 부분이 없다는건 똑같지만

 

&k2로 들어가지지도 않고

scope 후에 조사식에 k2를 쳐봐도 없다고 나옵니다

 

k2가 왜 삭제가 되는지 모르겠습니다

	shared_ptr<Knight> k1 = make_shared<Knight>();		// k1 생성될 때 k1의 ref count가 1로 초기화된다
	// 괄호 안은 ref count
	// k1 [		1]

	{
		shared_ptr<Knight>k2 = make_shared<Knight>();	// k2 생성될 때 k2의 ref count가 1로 초기화된다
		// k2 [		1]

		k1->_target = k2;		// k2를 타겟으로 하고 있어서 k2의 ref count가 올라간다
		// k2 [		2]

		k2->_target = k1;		// k1을 타겟으로 하고 있어서 k1의 ref count가 올라간다
		// k1 [		2]
	}
	// scope가 끝나서 k2가 참고하는 객체가 사라졌다... 사라지면 안되는거 아닌가?
	// k1을 타겟으로 하던 k2가 사라졌지만
	// k1 [		2]가 유지되었다	


	k1->Attack();

c++

답변 2

1

Rookiss

조사식에 없다고 Knight 객체가 메모리에서 사라진 것은 아닙니다.
말 그대로 변수 k2 로는 접근이 안 되는 이유는
k2 변수 자체는 소멸되었기 때문입니다 (하지만 k2가 가리키던 Knight 객체는 살아있음)

k1->Attack 부근에서 breakpoint를 걸고,
반드시 k1에서 _target이 있는지를 확인해보세요.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

스마트 포인터와 관련된 질문이신 것 같습니다. 지역 범위를 벗어난 후 shared_ptr의 동작이나 참조 카운트에 대해 궁금하신 부분이 있으신 것 같네요. 아래 링크의 유사한 질문에서 강사님께서 스마트 포인터의 작동 원리와 참조 카운트에 대해 자세히 설명해주셨습니다. 해당 답변이 도움이 될 것 같습니다.

위 링크의 답변들을 확인하시어 스마트 포인터의 동작 방식을 이해하시는 데 도움을 받으시길 바랍니다.

0

JM

비슷한 부분을 질문한 사람도 있지만

질문의도가 조금 다른것같습니다

가능하다면 선생님께서 직접 답변을 달아주시면 정말좋겠습니다

소스코드와 관련하여 질문드립니다

0

70

1

map 컨테이너의 emplace 함수에 대해

0

113

2

시작이 안되네요...!

0

96

2

EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유

0

126

1

리틀 엔디안 장점 질문합니다.

0

131

1

메모리 창에 주소를 넣었는데 영어 꺠짐

0

124

1

타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.

0

94

2

map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.

1

138

2

hello world 부터 오류 ㅠㅜ

0

188

1

지역변수가 스택? 레지스터

0

129

2

마지막 문제 질문드립니다.

0

164

2

메모리창이 비활성화됩니다.

0

98

1

이중포인터 강좌 부분 질문있습니다.

0

145

1

2를 더하는 이유

0

133

1

메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다

1

110

1

해당 코드는 왜 오류가 날까요?

0

155

1

마지막 문제 질문 있습니다.

0

119

1

강의 마지막부분에 질문이 있습니다.

0

191

2

Field초기화

0

140

1

virtual과 override 차이

0

314

2

3:30 참조자 리턴

0

167

1

map 찾기

0

158

1

프로그램 질문드려요

0

260

1

캐스팅 질문

0

138

1