본문 바로가기

프로그램언어/Effective STL

항목3 : 복사는 컨테이너 안의 객체에 맞게 비용은 최소화하며, 동작은 정확하게 하자.

무심코 지나간 이야기 이지만 책을 읽으면서 좀더 자세히 혹시 아는 내용이면 튼튼하게 내공을 쌓고,
부족한 부분은 보충하고자 하는 의미에서 정리를 시작하였습니다.
 
그 동안 현직 프로그래머인데라는 자만심에 의해 제 자신 스스로 도태되어 가는 모습을 느끼고 있을 때
상당히 괴롭고 이 짓을 해야 하는 가라는 고민에 빠져 헤어나오지 못하고 슬럼프가 오랫동안 지속되었습니다.

얼마동안 노력을 하지 않았다부터 시작을 하여 지금에 있는 모습까지 뒤돌아 보면서 많은 것을 느끼며
이제 새로이 시작하는 마음에 책을 다시 잡고 틈틈이 공부하면서 내공을 쌓고자 시작을 하였습니다.

많은 분들에게 도움이 되면 좋고 아니면 참고할 만한 블로그가 되었으면 하는 마음에 이렇게 정리를
시작할까 합니다.

서  론

컨테이너라 한다면 보통은 데이터를 저장하는 공간 또는 조작을 하는 공간이라 인식되어 왔고,
실제로 그러합니다. 객체는 원래 컨테이너에 있었던 것이 아니라 필요에 의해 insert, push_back에
의해 데이터를 복사해 나아가는 과정이며, 복사되어 들어가고, 복사되어 나오는 것이 바로 STL 방식
입니다. 객체를 vector, string, deque등에 어떤 데이터를 넣든지간에 지우면 객체들은 복사를 통해
밀려 들어옵니다. "객체 복사" 이것이 바로 STL 이죠



본  론

  복사가 이루어 지는 원리는 간단합니다. 객체의 복사는 해당 클래스의 복사용 멤버 함수를 사용하여
이러어지는데, 특히 복사 생성자와 복사 대입 연산자가 사용이 됩니다. STL에서 복사는 거의 모든 순간에
일어마며 단순한 객체를 컨테이너에 넣기만 하면 수행 성능의 병목현상을 일으키게 됩니다. 메모리 사용량
CPU 사이클의 폭풍은 더 욱더 거세게 됩니다.
 슬라이스 문제에 대해서 또 문제를 제기 해야 하는데 이를테면 파생 클래스의 가상 함수를 호출한다든지
문제를 가지고 있습니다. 책에서 그에 대한 해결점으로 제시되고 있는것은 포인터의 컨테이너 스마트
포인터를 이용하는 방안에 대해 제시하고 있습니다.