• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

복사 생성자 관련 질문이 있습니다.

23.02.17 21:04 작성 조회수 301

0

안녕하세요.

5분 50초경 설명을 보면 디버거 모드일 때는 복사생성자가 호출이 되지만 릴리즈 모드일 때는 복사생성자가 호출이 안된다고 설명을 해주셨는데요.

저는 디버거 모드, 릴리즈 모드 둘 다 복사생성자가 호출이 안됩니다.

이것도 디버거 모드이지만 컴파일러가 복사생성자 호출이 필요없다고 판단하고 복사생성자 호출을 하지 않은 걸까요?

답변 1

답변을 작성해보세요.

2

강민철님의 프로필

강민철

2023.02.18

꼭 디버그 모드와 릴리즈 모드로 복사 생성자 여부가 결정된다기보다는,

디버거 모드와 릴리즈 모드는 컴파일러의 최적화 수준이 다르고,

이 최적화 수준에 따라 호출여부가 결정된다라고 생각해주시면 좋을듯 합니다,

일반적으로 디버그 모드에서는 최적화 수준이 낮아서

코드 실행 중에 디버깅을 용이하게 하기 위해 많은 추가 코드가 추가됩니다.

이러한 코드 중에는 복사 생성자 호출과 관련된 코드도 포함될 수 있고

그렇기에 디어그 모드로 실행하면 복사 생성자 호출이 되는 경우가 많은 겁니다.

반면에 릴리즈 모드에서는 최적화 수준이 높습니다.

이 과정에서 복사 생성자 호출을 생략하는 경우도 많습니다.

또한, 컴파일러에서는 코드에서 변수의 사용 여부, 변수의 값이 변경되는 경우 등을 분석하여

해당 변수가 필요한지를 판단할 수 있습니다.

이러한 특수한 상황에서는 복사 생성자 호출이 필요 없는 경우도 있을 수 있습니다.

정리하면, Visual Studio에서도 디버그 모드와 릴리즈 모드에 따라 딱 잘라 복사 생성자가 호출 되느냐 안되느냐가 결정된다기보다는

호출할 필요성과 최적화 수준에 따라 복사 생성자 호출이 달라질 수 있습니다.

Creed님의 프로필

Creed

질문자

2023.02.21

설명해주셔서 감사합니다 :)