복사는 컨테이너 안의 객체에 맞게 비용 최소화, 동작은 정확히(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
반응형