|
| 1 | +--- |
| 2 | +title: |
| 3 | +date: 2026-01-07 22:17:43 +09:00 |
| 4 | +categories: [면접준비, 02.cpp_advence] |
| 5 | +published: false |
| 6 | +tags: |
| 7 | + [면접준비] |
| 8 | +--- |
| 9 | + |
| 10 | +# 🧠 C++ 복사 생성자 호출 타이밍 면접 질문 리스트 |
| 11 | + |
| 12 | +## ✅ 기본 개념 |
| 13 | + |
| 14 | +1. 복사 생성자란 무엇인가요? |
| 15 | + |
| 16 | + - 복사 생성자란 같은 타입의 변수를 인자로 받는 생성자입니다. 복사 생성자를 별도로 만들지 않는다면 컴파일러가 기본 복사 생성자를 생성해냅니다. |
| 17 | + |
| 18 | +2. 복사 생성자와 복사 대입 연산자의 차이는 무엇인가요? |
| 19 | + |
| 20 | + - 복사 생성자는 새로 만드는 변수에 사용되는 함수이고, 복사 대입 연산자는 이미 사용중인 변수에 대입하는 연산자입니다. |
| 21 | + |
| 22 | +## ✅ 컨테이너 / 문맥별 동작 |
| 23 | + |
| 24 | +1. STL 컨테이너에 객체를 push할 때 복사 생성자는 언제 호출되나요? |
| 25 | + |
| 26 | + - size가 capacity보다 작다고 가정했을 때, 가장 마지막 위치에 push하려는 객체로 복사 생성자가 호출됩니다. |
| 27 | + |
| 28 | +2. 컨테이너 재할당(reallocation) 시 복사 생성자는 언제 호출되나요? |
| 29 | + |
| 30 | + - 컨테이너가 재할당되면서 이동 생성자가 없는 타입의 경우에 모든 요소에 대해 복사 생성자가 호출됩니다. |
| 31 | + |
| 32 | +## ✅ 최적화 / 예외 상황 |
| 33 | + |
| 34 | +1. RVO(Return Value Optimization)란 무엇인가요? |
| 35 | + |
| 36 | + - 임시객체 최적화입니다. 임시 객체를 반환하기 위해 복사 생성자가 호출되어야 하지만, 반환하는 자리에 객체를 생성하는 것으로 복사 생성자의 호출을 줄입니다. |
| 37 | + |
| 38 | +2. RVO가 적용되면 복사 생성자는 호출되나요? |
| 39 | + |
| 40 | + - 호출되지 않습니다. |
| 41 | + |
| 42 | +## ✅ const / 참조 연계 |
| 43 | + |
| 44 | +1. const 객체를 복사할 때도 복사 생성자가 호출되나요? |
| 45 | + |
| 46 | + - 호출됩니다. |
| 47 | + |
| 48 | +2. 참조로 객체를 전달하면 복사 생성자가 호출되나요? |
| 49 | + |
| 50 | + - 호출되지 않습니다. |
| 51 | + |
| 52 | +## ✅ 설계 / 판단 |
| 53 | + |
| 54 | +1. 복사 생성자 호출이 잦으면 어떤 문제가 생기나요? |
| 55 | + |
| 56 | + - 깊은 복사가 존재한다면 메모리 할당이 자꾸 발생하는 문제가 생깁니다. |
| 57 | + |
| 58 | +2. 복사 생성자 호출을 줄이기 위한 방법에는 무엇이 있나요? |
| 59 | + |
| 60 | + - 이동 생성자와 이동 대입 연산자를 선언하여 이동을 사용하는 방법이 있습니다. |
| 61 | + |
| 62 | +--- |
| 63 | + |
| 64 | +## GPT 피드백 |
| 65 | + |
| 66 | +1. 복사 생성자의 정의가 약했음. 기존 객체를 이용해 새 객체를 만드는 생성자. |
| 67 | + |
| 68 | +<details> |
| 69 | +<summary>GPT 1줄 답변</summary> |
| 70 | +<div markdown="1"> |
| 71 | + |
| 72 | +## ?? 1줄 모범 답변 |
| 73 | + |
| 74 | +1. 기존 객체를 사용해 새 객체를 생성할 때 호출되는 생성자입니다. |
| 75 | +2. 복사 생성자는 새 객체 생성 시, 복사 대입 연산자는 기존 객체에 대입할 때 호출됩니다. |
| 76 | + |
| 77 | +3. 컨테이너 내부에 새 요소를 복사해 저장할 때 호출됩니다. |
| 78 | +4. 기존 요소들을 새 메모리로 옮길 때 호출됩니다. |
| 79 | + |
| 80 | +5. 반환 객체 생성을 최적화해 복사를 생략하는 컴파일러 최적화입니다. |
| 81 | +6. 아니요, RVO가 적용되면 복사 생성자는 호출되지 않습니다. |
| 82 | + |
| 83 | +7. 네, const 여부와 무관하게 복사 생성자는 호출됩니다. |
| 84 | +8. 아니요, 참조 전달은 객체를 새로 생성하지 않습니다. |
| 85 | + |
| 86 | +9. 불필요한 메모리 복사로 성능 저하가 발생합니다. |
| 87 | +10. 참조 전달, 이동语 지원, RVO 활용이 있습니다. |
| 88 | + |
| 89 | +</div> |
| 90 | +</details> |
| 91 | + |
0 commit comments