티스토리 뷰
smarter pointer의 일종인 auto_ptr의 특징과 stl의 주요 특징인 '모든 원소의 접근은 값의 복사가 기본이다'를 상기한다면
이 챕터의 이야기는 매우 간단해집니다.
auto_ptr은 최초에 할당이 이루어지고 대입이 이루어질 때 마다 권한이 위임되어 원래의 포인터는 null이 됩니다.
문제는 stl의 기본 동작은 다음을 전제한다는 점입니다.
'모든 원소의 대입은 값 복사가 기본이다'
다시말해 operator[], =,at같은 원소들은 컨테이너의 원소가 복사되지
포인터나 레퍼런스를 반환하지 않습니다. 따라서 stl에서의 auto_ptr의 사용은 다음과 같은
문제를 야기합니다.
.
Widget 타입으로 선언된 auto_ptr의 a에 v[0]을 대입하게 되는 순간 값의 복사가 일어남과 동시에
v[0]에 있던 원래의 auto_ptr은 null이 되고 a에 v[0]내용이 대입이 됩니다. 물론 새로운 auto_ptr이 생성되어 대입되었습니다.
이러한 이유로 stl에서는 auto_ptr의 사용을 무조건 금지되어 있습니다.
만일 sort와 같은 함수에서 사용된다면 컨테이너이 원소들이 원래와 달리 엉망이 될 것입니다.
이러한 이유로 item7과 같이 stl에서는 shared_ptr 사용이 권장됩니다.
'프로그래밍 > C C++' 카테고리의 다른 글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Codejam
- kernerl
- 문자열
- Pointer
- Algorithm
- 악보
- 정규표현식
- linux
- link
- 이루마
- regex
- 드럼
- peram jam
- 알고리즘
- 카카오 공채
- yiruma
- cpp
- 중국여행
- printf
- compile
- Spring
- 피아노
- STL
- 코드잼
- 사천
- 여행
- C++
- C language
- python
- 중국
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함