STL 컨테이너들은 객체를 복사하여, 데이터를 쌓아둔다. 만약 기본자료형이 아닌 클래스 객체형이라면, 반드시 복사 생성자와 operator = 을 꼭 만들어 두어야만 켄터에너에 순풍 순풍 넣을수 있다. (암시적 생성자와 operator= 도 있다.)
이런 컨테이너에 한가지 문제점이 지적되었다.
사용자 왈 : "만약 30Byte 짜리 데이터 10만개를 넣는다면, 너무 많은 비용을 지불하는게 아니냐?"
이 때문에 크게 두가지 해결 방법이 나오게 된다.
첫째, 포인터를 넣어 복사 비용을 줄이자.
사용자는 신나게 컨테이너에 포인터를 넣기 시작하지만,
컨테이너 왈 : "리소스 해체 의무는 너가 저야 한다~"
.. 결국 사용자는 울며 겨자먹기로 컨테이너에 포인터를 넣고, 힘들게 리소스 해체도 하게 된다. 이렇게 되자 많은 사람들이 너무 불편해 했다.점점 사용자 들은 해체 의무를 컨테이너가 질수 없다면, 영리한 포인터를 만들어, 영리한 포인터에게 해체 의무를 일임하면 되지 않을까? 란 생각에 도달하게 된다.
그래서 나온것이 smart_ptr이다. 이녀석들은 일반적으로 자기 자신이 해체 의무도 갖도록 설계 되었다.
이 smart_ptr을 넣으므로써, 비용을 줄일수 있다.
둘째, 컨테이너 자체에서 객체를 생성시키자.
이 방법은 vector 의 경우
자.. 이렇게 하면, 비용을 최소화하고, 동작은 정확하게 될 것이다.
관련링크
http://lagoons.net/tt/575
이런 컨테이너에 한가지 문제점이 지적되었다.
사용자 왈 : "만약 30Byte 짜리 데이터 10만개를 넣는다면, 너무 많은 비용을 지불하는게 아니냐?"
이 때문에 크게 두가지 해결 방법이 나오게 된다.
첫째, 포인터를 넣어 복사 비용을 줄이자.
사용자는 신나게 컨테이너에 포인터를 넣기 시작하지만,
컨테이너 왈 : "리소스 해체 의무는 너가 저야 한다~"
.. 결국 사용자는 울며 겨자먹기로 컨테이너에 포인터를 넣고, 힘들게 리소스 해체도 하게 된다. 이렇게 되자 많은 사람들이 너무 불편해 했다.점점 사용자 들은 해체 의무를 컨테이너가 질수 없다면, 영리한 포인터를 만들어, 영리한 포인터에게 해체 의무를 일임하면 되지 않을까? 란 생각에 도달하게 된다.
그래서 나온것이 smart_ptr이다. 이녀석들은 일반적으로 자기 자신이 해체 의무도 갖도록 설계 되었다.
이 smart_ptr을 넣으므로써, 비용을 줄일수 있다.
둘째, 컨테이너 자체에서 객체를 생성시키자.
이 방법은 vector 의 경우
자.. 이렇게 하면, 비용을 최소화하고, 동작은 정확하게 될 것이다.
관련링크
http://lagoons.net/tt/575
'책 정리 > Effective STL' 카테고리의 다른 글
항목 10 : 할당자(allocator)의 일반적인 사항과 제약 사항에 대해 잘 알아 두자. (2) | 2008.07.14 |
---|---|
항목 9 : 데이터를 삭제할 때에도 조심스럽게 선택할 것이 많다. (0) | 2008.07.13 |
항목 8 : auto_ptr의 컨테이너는 절대로 만들지 말자. (0) | 2008.07.13 |
항목 7 : new로 생성한 포인터의 컨테이너를 사용할 대에는 컨테이너가 소멸되기 전에 포인터를 delete하는 일을 잊지 말자. (0) | 2008.07.13 |
항목 6 : C++ 컴파일러의 어이없는 분석 결과를 조심하자. (0) | 2008.07.13 |
항목 5 : 단일 요소를 단위로 동작하는 멤버 함수보다 요소의 범위를 단위로 동작하는 멤버 함수가 더 낫다. (0) | 2008.07.13 |
항목 4 : size()의 결과를 0과 비교할 생각이라면, 차라리 empty를 호출하자 (0) | 2008.07.12 |
항목 2: "컨테이너에 독립적인(container-independent) 코드"라는 환상을 조심하자. (0) | 2008.07.12 |
항목 1: 적재적소에 알맞는 컨테이너를 사용 하자. (0) | 2008.07.11 |
Effective STL 목차 및 링크 (0) | 2008.07.11 |
최근댓글