More actions
({CREATE}) |
(Repair batch-0005 pages from live compare) |
||
| (7 intermediate revisions by one other user not shown) | |||
| Line 1: | Line 1: | ||
당신이 들어보지 못한 C++ 이야기 | |||
* 봉봉의 봉봉를 위한 봉봉에 의한 | |||
휴학을 해보세요 | |||
__TOC__ | |||
== auto == | |||
* 마법의 키워드 | |||
* 컴파일 타임에 변수의 타입을 연역 | |||
* 사용하면 좋은 경우 | |||
** 템플릿 등을 사용하여 타입명이 길어질 때 | |||
** 타입이 명확하지 않은 경우 | |||
* 위 상황 이외에 사용하면 읽기가 더 난해해진다. | |||
* auto를 사용한 새로운 함수 선언법 | |||
** 임의의 (같은 형이 아닌) 두 변수의 합을 구하는 함수? | |||
** auto function -> decltype | |||
** C++ 14부터는 그냥 auto로 (단, 재귀로 사용할 경우 첫번째 return 형) | |||
** decltype(auto)도 가능해 짐 | |||
== 람다 표현식 == | |||
* 익명 함수를 인라인으로 작성 | |||
* [] 와 {} | |||
* [] 캡쳐블록 | |||
** 지정한 scope에서 값들을 복사 | |||
** 원본갑소가 같은 지정자를 가진다 (const .. ) | |||
** ex) =, &, ::X,&yX,&y:X,&yX,&y ::X,&yX,&y ::X,&y x, &y, ::=,&x,&y=,&x,&y:=,&x,&y=,&x,&y ::=,&x,&y=,&x,&y ::=,&x,&y =, &x, &y | |||
* 캡쳐블록(파라미터 목록) MUTABLE 익셉션목록 속성지정 -> 리턴타입 {함수바디} | |||
* 제너릭 람다 표현식 | |||
** 타입 추론 기능 지원 - 템플릿 인자 추론과 동일 | |||
* 캡쳐 표현식 -> scope 내에 있지 않더라도 포함 가능 | |||
* 템플릿 함수의 반환형 또는 파라미터로 사용 | |||
== 우측값 == | |||
* 상수값, 임시 객체(객체 반환값, 값으로서 객체를 파라미터로 사용) 등을 지칭 | |||
* rvalue reference를 나타내기 위해 &&를 사용 | |||
* std::move()를 통해 lvalue를 rvalue로 | |||
* 이동 시맨틱 | |||
== 스마트 포인터 == | |||
* 포인터를 관리하여 에일리어싱을 방지 | |||
* 레퍼런스 카운터를 내부적으로 가짐 | |||
* 이가 0이 될 때, 자동으로 delete 해준다. | |||
* unique_ptr | |||
** 레퍼런스 카운터 지원 x, 단독 소유권, 스코프를 벗어나면 바로 해제 | |||
** 스택 기반의 객체 인스턴스를 동적으로 할당할 때 유용 | |||
** c 스타일 배열 저장 | |||
** C++ 14에서 추간된 MAKE_UNIQUE() | |||
* shared_ptr | |||
** 레퍼런스 카운터 지원, 스레드 세이프 | |||
** MAEK_SHARED() | |||
** 추가적으로 타입캐스를 하기 위한 함수를 제공 | |||
** c 스타일 배열 저장 x | |||
* weak_ptr | |||
** shared ptr을 관리하는 포인터를 담을 수 있음 | |||
** 포인터에 접근하기 위해서는 shared_ptr로 변환해야 하는데, | |||
** lock() | |||
** 생성자에 weak_ptr를 인자로 | |||
== 예외처리 == | |||
* 생성자에서 발생하는 에러 | |||
** 기본적으로 스마트 포인터를 사용하면 해결 가능 | |||
** 초기화 리스트에서 에러 -> 함수 try 블록으로 해결 | |||
** 몇 가지 주의점이 있지만, | |||
** 초기화 리스트에서 발생한 익셉션을 다른 익셉션으로 변환해서 던질 때 | |||
** 에러 메세지 로깅 | |||
** 익셉션 발생 전에 이미 할당된 메모리를 해제할 때 | |||
* 소멸자에서 발생하는 에러 | |||
** 내부에서 처리해야 한다. | |||
== 마치며 == | |||
* 어렵고 난해한 언어이지만, | |||
* 애정을 갖고 배웁시다 | |||
Latest revision as of 00:44, 27 March 2026
당신이 들어보지 못한 C++ 이야기
- 봉봉의 봉봉를 위한 봉봉에 의한
휴학을 해보세요
auto
- 마법의 키워드
- 컴파일 타임에 변수의 타입을 연역
- 사용하면 좋은 경우
- 템플릿 등을 사용하여 타입명이 길어질 때
- 타입이 명확하지 않은 경우
- 위 상황 이외에 사용하면 읽기가 더 난해해진다.
- auto를 사용한 새로운 함수 선언법
- 임의의 (같은 형이 아닌) 두 변수의 합을 구하는 함수?
- auto function -> decltype
- C++ 14부터는 그냥 auto로 (단, 재귀로 사용할 경우 첫번째 return 형)
- decltype(auto)도 가능해 짐
람다 표현식
- 익명 함수를 인라인으로 작성
- [] 와 {}
- [] 캡쳐블록
- 지정한 scope에서 값들을 복사
- 원본갑소가 같은 지정자를 가진다 (const .. )
- ex) =, &, ::X,&yX,&y:X,&yX,&y ::X,&yX,&y ::X,&y x, &y, ::=,&x,&y=,&x,&y:=,&x,&y=,&x,&y ::=,&x,&y=,&x,&y ::=,&x,&y =, &x, &y
- 캡쳐블록(파라미터 목록) MUTABLE 익셉션목록 속성지정 -> 리턴타입 {함수바디}
- 제너릭 람다 표현식
- 타입 추론 기능 지원 - 템플릿 인자 추론과 동일
- 캡쳐 표현식 -> scope 내에 있지 않더라도 포함 가능
- 템플릿 함수의 반환형 또는 파라미터로 사용
우측값
- 상수값, 임시 객체(객체 반환값, 값으로서 객체를 파라미터로 사용) 등을 지칭
- rvalue reference를 나타내기 위해 &&를 사용
- std::move()를 통해 lvalue를 rvalue로
- 이동 시맨틱
스마트 포인터
- 포인터를 관리하여 에일리어싱을 방지
- 레퍼런스 카운터를 내부적으로 가짐
- 이가 0이 될 때, 자동으로 delete 해준다.
- unique_ptr
- 레퍼런스 카운터 지원 x, 단독 소유권, 스코프를 벗어나면 바로 해제
- 스택 기반의 객체 인스턴스를 동적으로 할당할 때 유용
- c 스타일 배열 저장
- C++ 14에서 추간된 MAKE_UNIQUE()
- shared_ptr
- 레퍼런스 카운터 지원, 스레드 세이프
- MAEK_SHARED()
- 추가적으로 타입캐스를 하기 위한 함수를 제공
- c 스타일 배열 저장 x
- weak_ptr
- shared ptr을 관리하는 포인터를 담을 수 있음
- 포인터에 접근하기 위해서는 shared_ptr로 변환해야 하는데,
- lock()
- 생성자에 weak_ptr를 인자로
예외처리
- 생성자에서 발생하는 에러
- 기본적으로 스마트 포인터를 사용하면 해결 가능
- 초기화 리스트에서 에러 -> 함수 try 블록으로 해결
- 몇 가지 주의점이 있지만,
- 초기화 리스트에서 발생한 익셉션을 다른 익셉션으로 변환해서 던질 때
- 에러 메세지 로깅
- 익셉션 발생 전에 이미 할당된 메모리를 해제할 때
- 소멸자에서 발생하는 에러
- 내부에서 처리해야 한다.
마치며
- 어렵고 난해한 언어이지만,
- 애정을 갖고 배웁시다