ㄱ. STL의 방식은 복사되어 ( 컨데이너에 ) 들어가고, 복사 되어 나온다.
이런 복사는 해당 클래스의 복사용 멤버 함수를 사용 ( 복사 생성자, 복사 대입 연산자 ).
ㄴ. STL의 기본 복사 방식으로 생기는 문제점.
① STL의 기본이 복사 방식으로 이루어 지기 때문에 데이터가 크면 클수록 메모리 사용량과 CPU 사용률은 더욱 높아 지는 문제점.
② 상속된 객체의 경우 복사 동작이 제대로 이루어 지지 않는 형상 – 슬라이스.
기본 클래스의 컨테이너를 만들고 파생 클래스를 객체를 넣으면, 복사 과정에서 기본 생성자가 쓰이면서 파생 클래스 부분에 선언된 데이터는 잘려나감.
ㄷ. 해결 방안.
객체의 컨테이너를 만들지 않고, 포인터의 컨테이너를 만듬.
① 속도가 빠름 – 포인터만 복사 하면 되기 때문
② 정확 – 포인터를 이루는 비트를 복사 하기 때문.
③ 슬라이스 문제 해결 – 포인터를 복사 될 때 잘려나가는 데이터가 생기지 않음.
이렇게 포인터의 컨테이너를 만들면 인해 메모리 관리에 대한 문제점이 생기지만 스마트 포인터를 사용하면 해결 가능.
'[ Programming ] > [ Effective STL]' 카테고리의 다른 글
STL 항목 7 : new로 생성한 포인터의 컨테이너를 사용할 때에는 컨테이너가 소멸되기 전에 포인터를 delete하는 일을 잊지 말자. (0) | 2009.10.28 |
---|---|
STL 항목 5 : 단일 요소를 단위로 동작하는 멤버 함수보다 요소의 범위를 단위로 동작하는 멤버 함수가 더 낫다. (0) | 2009.10.27 |
STL 항목 4 : size()의 결과를 0과 비교할 생각이라면 차라리 empty를 호출하자. (0) | 2009.10.27 |
STL 항목 2 : “컨테이너에 독립적인 코드” 라는 환상을 조심하자. (0) | 2009.10.23 |
STL 항목 1 : 적재적소에 알맞은 컨테이너를 사용하자. (0) | 2009.10.22 |