당신이 들어보지 못한 C++ 이야기
- 봉봉의 봉봉를 위한 봉봉에 의한
휴학을 해보세요1. auto ¶
- 마법의 키워드
 
- 컴파일 타임에 변수의 타입을 연역
 
- 사용하면 좋은 경우
 - 템플릿 등을 사용하여 타입명이 길어질 때
 
- 타입이 명확하지 않은 경우
 
 
- 템플릿 등을 사용하여 타입명이 길어질 때
- 위 상황 이외에 사용하면 읽기가 더 난해해진다.
 
- auto를 사용한 새로운 함수 선언법
 - 임의의 (같은 형이 아닌) 두 변수의 합을 구하는 함수?
 
- auto function -> decltype
 
- C++ 14부터는 그냥 auto로 (단, 재귀로 사용할 경우 첫번째 return 형)
 - decltype(auto)도 가능해 짐
 
 
- decltype(auto)도 가능해 짐
 
- 임의의 (같은 형이 아닌) 두 변수의 합을 구하는 함수?
2. 람다 표현식 ¶
- 익명 함수를 인라인으로 작성
 
- [] 와 {}
 
- [] 캡쳐블록
 
- 캡쳐블록(파라미터 목록) MUTABLE 익셉션목록  속성지정 -> 리턴타입 {함수바디}
 
- 제너릭 람다 표현식
 - 타입 추론 기능 지원 - 템플릿 인자 추론과 동일
 
 
- 타입 추론 기능 지원 - 템플릿 인자 추론과 동일
- 캡쳐 표현식 -> scope 내에 있지 않더라도 포함 가능
 
- 템플릿 함수의 반환형 또는 파라미터로 사용
 
3. 우측값 ¶
- 상수값, 임시 객체(객체 반환값, 값으로서 객체를 파라미터로 사용) 등을 지칭
 
- rvalue reference를 나타내기 위해 &&를 사용
 
- std::move()를 통해 lvalue를 rvalue로
 
- 이동 시맨틱 
 
4. 스마트 포인터 ¶
- 포인터를 관리하여 에일리어싱을 방지
 
- 레퍼런스 카운터를 내부적으로 가짐
 
- 이가 0이 될 때, 자동으로 delete 해준다.
 
- unique_ptr 
 - 레퍼런스 카운터 지원 x, 단독 소유권, 스코프를 벗어나면 바로 해제
 
- 스택 기반의 객체 인스턴스를 동적으로 할당할 때 유용
 
- c 스타일 배열 저장
 
- C++ 14에서 추간된 MAKE_UNIQUE()
 
 
- 레퍼런스 카운터 지원 x, 단독 소유권, 스코프를 벗어나면 바로 해제
- shared_ptr 
 - 레퍼런스 카운터 지원, 스레드 세이프
 
- MAEK_SHARED()
 
- 추가적으로 타입캐스를 하기 위한 함수를 제공
 
- c 스타일 배열 저장 x
 
 
- 레퍼런스 카운터 지원, 스레드 세이프
- weak_ptr
 - shared ptr을 관리하는 포인터를 담을 수 있음
 
- 포인터에 접근하기 위해서는 shared_ptr로 변환해야 하는데,
 - lock()
 
- 생성자에 weak_ptr를 인자로
 
 
 
- lock()
 
- shared ptr을 관리하는 포인터를 담을 수 있음













