inflearn logo
강의

Course

Instructor

Hong Jung-mo's C++ Programming: Learning by Doing

9.9 Copy constructor, copy initialization return value optimization

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

Resolved

450

Creed

22 asked

0

안녕하세요.

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

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

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

c++ C++

Answer 1

2

kangminchul

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1

Creed

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

변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠

1

461

1

메모리 주소 10진수로 출력

1

650

1

클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.

1

496

1

여러가지 리턴 타입에 관한 강의가 어떤 걸까요?

1

529

1

메모리 주소에 관한 질분

0

676

1

인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.

0

545

1

형변환 오버로딩에서 const 관련 질문이 있습니다.

0

439

1

Digit 뒤에 reference를 사용하는 이유

0

504

1

4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결

0

319

1

dat파일이...

0

534

1

TODO:대입 연산자 오버로딩에 대한 소스코드입니다.

0

640

1

수업 중 궁금한점이 있습니다.

1

386

1

라이브러리자체가 이해가 되지 않습니다.

0

557

1

마지막 예제 질문

0

299

1

증감연산자 위치에 따른 수행 순서 질문입니다.

0

371

1

단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.

1

408

1

friend함수 관련 질문이 있습니다.

0

308

1

operator+ 정의부분에서 궁금한 것이 있습니다.

0

443

1

3분 17초 질문

0

346

1

함수에 값을 대입한다는 개념이 이해가 되지 않습니다.

0

443

1

int getvalue() const에서 const는 왜 뒤에 붙는건가요?

0

440

2

const Something &st에서 const를 빼면 안되나요?

0

296

1

friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??

1

489

1

연쇄호출에 대해 질문있습니다!

0

371

1