복사는 컨테이너 안의 객체에 맞게 비용 최소화, 동작은 정확히(effective STL 03)
2015. 8. 25. 19:07ㆍ프로그래밍/Effective STL
728x90
728x90
STL의 방식
copy in, copy out!
컨테이너에서 넣거나 뺄 때 복사.
복사가 왜?
STL에서 복사는 거의 모든 순간에 일어난다.
- 큰 객체를 컨테이너에 넣을 때에 단순히 객체를 컨테이너에 넣으면
수행 성능의 병목현상을 일으킨다는 것.
- 상속된 객체의 경우 복사 동작 중에 데이터가 잘리기도 한다.(복사 손실)
포인터를 넣으면?
포인터만 복사하므로 뒤의 문제가 생기지 않는다.
하지만.. 이것도 STL의 골칫거리다.
(뒤의 장에서 자세히 다루지만 대충 remove 계열 함수에서 메모리 누수나 다른쪽을 가리키는 현상 등등)
해결은 스마트 포인터가 괜찮은 방법
배열 vs 백터
STL은 일반적으로 "불필요한"복사를 피하도록 설계되어있다.
1 2 | Widget w[size]; vector<Widget> ww; | cs |
line1은 size개의 Widget 객체를 생성한다. 짤 없이 다 생성!
lien2는 생성하면 Widget 객체는 0개. 이후 자라난다.
STL은 분명 복사가 일어나지만 C++ 배열보다는 여전히 엄청나게 좋다.
728x90
반응형
'프로그래밍 > Effective STL' 카테고리의 다른 글
[effective STL] 항목 08 : auto_ptr의 컨테이너는 절대 말들지 말기 (0) | 2015.09.06 |
---|---|
[effective STL] 항목 07 : 포인터를 컨테이너 담을 때 주의 (0) | 2015.09.06 |
[effective STL] 항목 06 : C++ 컴파일러의 어이없는 컴파일 조심! (2) | 2015.09.05 |
맴버 함수는 단일 요소 단위 보단 요소의 범위 단위로 (effective STL 05) (0) | 2015.08.27 |
size() == 0? empty()!! (effective STL 04) (0) | 2015.08.25 |
컨테이너 독립적인코드라는 환상 조심!(effective STL 02) (0) | 2015.08.25 |
적재적소 알맞은 컨테이너(effective STL 01) (2) | 2015.08.25 |