C++에서 스마트 포인터란 무엇인가요?
_____A1. 스마트 포인터는 C++에서 메모리 관리 자동화를 돕는 클래스 템플릿으로, 동적으로 할당한 객체의 소유권을 관리하여 메모리 누수 및 잘못된 접근을 방지합니다.
Q2. 왜 스마트 포인터를 사용해야 하나요?
A2. 스마트 포인터는 수동으로 `new`와 `delete`를 호출하는 번거로움을 줄여주고, 예외 발생 시에도 자동으로 자원을 해제하므로 안정적이고 안전한 메모리 관리를 보장합니다.
Q3. C++ 표준 라이브러리에 제공되는 주요 스마트 포인터 종류는 무엇인가요?
A3. 대표적으로 `std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr` 세 가지가 있습니다.
Q4. `std::unique_ptr`의 특징은 무엇인가요?
A4. 유일한 소유권을 가지며, 복사는 불가능하지만 이동(move)은 가능합니다. 하나의 `unique_ptr`만 객체를 소유할 수 있고, 소유권이 소멸되거나 이동될 때 자동으로 메모리를 해제합니다.
Q5. `std::shared_ptr`는 어떻게 동작하나요?
A5. 참조 카운팅 방식을 이용해 여러 개의 포인터가 같은 객체를 공유할 수 있습니다. 마지막 `shared_ptr`가 소멸되면 자동으로 메모리를 해제합니다.
Q6. `std::weak_ptr`는 왜 사용하나요?
A6. `shared_ptr`가 관리하는 객체를 참조하되 소유권을 갖지 않고, 참조 카운트를 증가시키지 않아 순환 참조 문제 해결 등에 사용됩니다. 사용하기 위해서는 `lock()`으로 `shared_ptr`를 얻어야 합니다.
Q7. 스마트 포인터를 사용할 때 주의사항이 있나요?
A7. 직접 `delete` 호출을 피하고, 동일 객체를 여러 `unique_ptr`가 소유하지 않도록 해야 하며, 순환 참조가 발생하지 않도록 `shared_ptr`와 `weak_ptr`을 적절히 사용해야 합니다.
Q8. 스마트 포인터를 직접 만들 필요가 있나요?
A8. 일반적으로 표준 라이브러리의 스마트 포인터를 사용하는 것이 권장되며, 특수한 상황에서 커스텀 스마트 포인터를 설계할 수 있습니다.
Q9. 스마트 포인터와 일반 포인터 간 차이점은 무엇인가요?
A9. 일반 포인터는 소유권과 메모리 해제 책임이 프로그래머에 있지만, 스마트 포인터는 소유권을 명확히 하여 자동으로 메모리를 관리합니다.
Q10. 스마트 포인터는 성능에 영향을 주나요?
A10. 약간의 오버헤드(특히 `shared_ptr`의 참조 카운트 관리)가 있지만, 현대 컴파일러 최적화로 대부분 상황에서 무시할 수 있는 수준입니다. 안정성과 안전성을 위해 권장됩니다.
작성자:
김지우 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:31
조회수: 243 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 243 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.