티스토리 뷰


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 사용이 권장됩니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함