본문 바로가기

C++/STL 및 기타

(3)
c++ idiom C++ Idiom 프로그래밍시 발생하는 문제를 해결하기 위한 기법 같은 것. c++ 의 언어적인 특성에 기반한 팁 문제해결 패턴 같은 것들이라고 할 수 있다. https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms (다양한 기법과 패턴들이 나와있다.) 여기서는 널리 쓰이는 기법들만 소개하고자 한다. PImpl (Pointer to Implementation) 포인터를 이용해서, 실제 구현체를 감춰두는 기법. 아래 두가지의 장점이 있다. 1) 전방 선언을 통한 컴파일 시간 단축 2) 인터페이스와 구현의 분리 실제 구현부를 인터페이스에 작성하지 않아서, 변경되더라도 인터페이스는 변경하지 않는다. 인터페이스가 변경되지 않았기 때문에 client 코드를 다시 컴파일 할 필요가 ..
Move Semantic Move Semantics (이동 문법) 이동 생성자와 이동 할당 연산자를 구현한 클래스를 move semantic 을 갖고 있다고 한다. 변수(이름으로 참조 할 수 있는 데이터)는 깊은 복사를 하고, 임시값(이름으로 참조 할 수 없는 데이터)이 데이터를 전송한다는 컨셉 객체에 대한 메모리 소유권을 이동시키면서 댕글링 포인터, 메모리 릭을 방지 ( (해제된 메모리를 가리키고 있는 것을 댕글링 포인터라고 한다.) 불필요한 복사를 줄일 수 있다. 벡터 같은 컨테이너에 원소 복사시 유용하게 쓰인다. 객체를 컨테이너에 가져 올 때, 객체 복제가 아닌 이동시킬 수 있다. 임시 객체를 리턴할 때도, 일반 복제 대입 연산 대신에 이동 연산을 이용한다.. lvalue , rvalue lvalue : 주소값을 취할 수 ..
vector [c++14 STL 철저입문] 참고 vector 컨테이너 순차열 컨테이너. 길이가 가변적임 순차열의 끝에서만 원소를 추가하거나 삭제 할 수 있음 vector 에 할당된 용량(capcaity) 를 초과하는 즉시 더 많은 원소를 저장할 수 있는 추가공간이 자동 할당됨 -> 크기가 커질때 발생하는 오버헤드나 중간에 원소를 삽입 or 삭제하는 오버헤드를 잘 알고 사용한다면 눈에 띄게 느려지는 일은 없음 capacity : 메모리를 추가 할당하지 않아도 저장할 수 있는 원소들의 개수. 실제 원소의 개수를 말하는게 아님 vector values{1,12,3,5}; values.reserve(7); //용량을 7로 늘린다. vector 함수 멤버 reserve() vector 가 수용할 수 있는 메모리를 할당 res..