shared_ptr의 Refrence Count 연산은 비쌀 수 있다
- Atomic 연산
- Atomic Increment/Decrement 연산은 (생각보다) 비싸다.
- 스마트포인터의 의미없는 복사가 발생하는 경우가 많다.
- Vector
- Reallocation에서 RefCount++/RefCount-- 발생

- 최신 C++에서 문제가 개선 되었더라도 여전히 어디선가 Atomic 연산이 발생할 수 있다.
소유권 이전
- 사라질 객체는 소유권을 위임하는 것으로 충분.
- 소유권을 위임 함으로서 Refrence를 늘리거나 줄이는 작업을 할 필요 없음.
- Vector에 RValue 사용하면 Move Constructor 호출 ?
- Nop ! Lavlue로 받게됨.
- Perfect Forwarding을 하도록 수정하면 문제 해결 가능
Cppcon20215 - Writing Good C++14
- 스트롭스트룹
- shared_ptr이 지나치게 남용
- shared_ptr을 파라미터, 리턴으로 많이 사용
- Dangling Pointer는 룰을 잘 따르고 룰을 이용하면 다 잡을 수 있다
- Rules for Eliminationg Dangling Pointers
- Owner와 Non-Owner 구분.
- Raw-Pointer는 모두 Non-Owner.
- Pointer가 Owner의 Scope를 벗어나려하는 시도를 모두 잡는다.
- Parameter로 받아서 Return으로 돌려주는 건 괜찮음.
- Ownere를 가지고 있는 객체는 Owner다.

Variadic Template
- 임의의 인자 개수를 지원하는 템플릿 형식(클래스, 함수 보두 지원).
- 적절히 활용하면 가독성을 높일 수 있다.
template<typename... Args>
void DoFunc(Args... args) {
Func(args...);
}
sizeof...(Args)
Base(base)... {}
std::tuple은 템플릿으로 만들어져 있다
- 튜플은 정적 타입이다 !.

- integer_sequence.

- 튜플을 매개 변수로 사용 가능.
- sequence 이용해서 tuple 순회 가능
- Ellipsis Operator의 활용
- 컴파일 하면 다음과 같은 추론 문제 발생 가능
콜스택 줄이기
- 과거엔 this의 타입을 추론하기 위해서 *_impl 함수 만듬.
- 지금은 decltype 사용 가능.
Future-Promise
- async, future, promise, packaged_task, thread...
- promise, future
- 미래라는 관념을 실체화 할 수 있다.

- async
- std::launch::async : 호출시 비동기로 실행(다른 쓰레드에서 실행 되는 것이 보장).
- std::launch::deferred : 나중에 값을 필요로 할 떄 실행. Lazy Evaluation.

- future 패턴은 어디에 ?
- 콜백 지옥을 벗어나고 싶을때
- 싱글 쓰레드 로직 중간에 분산처리를 넣고 싶을때.
- async 분산 작업
성능 측정 툴
- 윈도우 퍼포먼스 모니터.
- Visual Studio vTune.
Link