inflearn logo
강의

講義

知識共有

C++とUnrealで作るMMORPGゲーム開発シリーズ Part1: C++プログラミング入門

浅いコピー vs 深いコピー #1

생성자에서 new를 하는 건 안 좋은 습관이라고 하셨는데 그 이유가 무엇인가요?

323

helio5242430

投稿した質問数 2

0

얕은 복사 vs 깊은 복사 #1 15:50에서

생성자 안에서 new를 하는 건 안 좋은 습관이라고 하셨는데 그 이유가 무엇인가요?

c++

回答 1

0

100end

얕은 제 지식으로 답변을 대신 드리자면 아마 여러 멤버 변수를 가지고 있는 클래스의 생성자를 오버로딩할 때 생길 수 있는 문제(파라미터 개수, 순서 등) 때문인거 같습니다.
그리고 생성자는 클래스 이름을 사용하다보니 의미가 명확하지 않기에 별도의 이름을 지어줄 수 있는 함수에서 생성자를 호출해 리턴해주는 식으로 사용하는 것이 더 좋기 때문인거 같습니다.

0

helio5242430

음... C++ 11에서는 생성자에서 다른 생성자를 호출해주는 기능이 있는 것으로 알기 때문에 특정 값만 원하는 방식으로 초기화하고 공통된 부분은 기본 생성자에서 처리하는 등 생성자 오버로딩 시에도 큰 문제가 없다고 생각했습니다.
혹시 오버로딩 시 생길 수 있는 문제가 어떤 것인지 구체적으로 말씀해주실 수 있을까요?

0

100end

아 제가 말한 오버로딩 시 생길 수 있는 문제는 빌더패턴과 관련된 부분입니다.
특정 값만 원하는 방식으로 초기화해주기 위해서 생성자를 오버로딩하게 되는데
그런 상황이 여러가지라면 그 상황에 맞는 생성자를 계속 만들어줘야 하지만
모든 상황에 맞게 생성자를 생성하는 것도 한계가 있기 때문에
생성자를 호출할 때 생성자(100, 0, 200, 300, 0, 400) 과 같이 매개변수들 중간에
초기화 시켜주지 않는 부분은 0으로 비워준 채로 사용하게 되는 경우가 생길 수도 있겠죠.

이런 문제들을 빌더패턴 이라는 걸 활용해서 해결합니다.
이 부분은 강사님 말씀의 의도랑 다른 부분인거 같은데 이렇게 답해버렸네요.

0

helio5242430

오 빌더 패턴이란 건 처음 보는 패턴이네요
this 를 return 시켜서 원하는 값을 초기화 하는 방식이군요

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

0

65

1

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

0

107

2

시작이 안되네요...!

0

95

2

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

0

124

1

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

0

129

1

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

0

124

1

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

0

93

2

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

1

138

2

hello world 부터 오류 ㅠㅜ

0

185

1

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

0

126

2

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

0

162

2

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

0

98

1

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

0

145

1

2를 더하는 이유

0

131

1

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

1

109

1

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

0

153

1

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

0

115

1

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

0

190

2

Field초기화

0

140

1

virtual과 override 차이

0

312

2

3:30 참조자 리턴

0

165

1

map 찾기

0

155

1

프로그램 질문드려요

0

255

1

캐스팅 질문

0

135

1