목록Tutorials/C++ : Advanced (99)
KoreanFoodie's Study
약 두 달간 읽으며 정리하고 요약한 Effective C++ 와 Effective Modern C++ 게시글들에 대한 리스트 요약글입니다. 개발하실때 참고하시길 바라며, 직접 사서 읽어보시길 강추드립니다! 1장 형식 연역 항목 1: 템플릿 형식 연역 규칙을 숙지하라 항목 2: auto의 형식 연역 규칙을 숙지하라 항목 3: decltype의 작동 방식을 숙지하라 항목 4: 연역된 형식을 파악하는 방법을 알아두라 2장 auto 항목 5: 명시적 형식 선언보다는 auto를 선호하라 항목 6: auto가 원치 않은 형식으로 연역될 때에는 명시적 형식의 초기치를 사용하라 3장 현대적 C++에 적응하기 항목 7: 객체 생성 시 괄호(())와 중괄호({})를 구분하라 항목 8: 0과 NULL보다 nullptr를 선..
약 두 달간 읽으며 정리하고 요약한 Effective C++ 와 Effective Modern C++ 게시글들에 대한 리스트 요약글입니다. 개발하실때 참고하시길 바라며, 직접 사서 읽어보시길 강추드립니다! Chapter 1 C++에 왔으면 C++의 법을 따릅시다 항목 1: C++를 언어들의 연합체로 바라보는 안목은 필수 항목 2: #define을 쓰려거든 const, enum, inline을 떠올리자 항목 3: 낌새만 보이면 const를 들이대 보자! 항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자 Chapter 2 생성자, 소멸자 및 대입 연산자 항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 항목 6: 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 42 : 삽입 대신 생성 삽입을 고려하라 핵심 : 1. 이론적으로, 생성 삽입 함수들은 종종 해당 삽입 버전보다 더 효율적이어야 하며, 덜 효율적인 경우는 절대로 없어야 한다. 2. 실질적으로, (1) 추가할 값이 컨테이너에 배정되는 것이 컨테이너에 배정되는 것이 아니라 컨테이너 안에서 생성되고, (2) 인수 형식(들)이 컨테이너가 담는 형식과 다르고, (3) 그 값이 중복된 값이어도 컨테이너가 거부하지 않는다면, 생성 삽입 함수가 삽입 함수보다 빠를 가능성이 아주 크다. 3. 생성 삽입 함수는 삽입 함수라면 거부당했을 형식 변환들을 ..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 41 : 이동이 저렴하고 항상 복사되는 복사 가능 매개변수에 대해서는 값 전달을 고려하라 핵심 : 1. 이동이 저렴하고 항상 복사되는 복사 가능 매개변수에 대해서는 값 전달이 참조 전달만큼이나 효율적이고, 구현하기가 더 쉽고, 산출되는 목적 코드의 크기도 더 작다. 2. 왼값 인수의 경우 값 전달(즉, 복사 생성) 다음의 이동 배정은 참조 전달 다음의 복사 배정보다 훨씬 비쌀 가능성이 있다. 3. 값 전달에서는 잘림 문제가 발생할 수 있으므로, 일반적으로 기반 클래스 매개변수 형식에 대해서는 값 전달이 적합하지 않다. Widget 클래..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 40 : 동시성에는 std::atomic 을 사용하고, volatile 은 특별한 메모리에 사용하라. 핵심 : 1. std::atomic 은 뮤텍스 보호 없이 여러 스레드가 접근하는 자료를 위한 것으로, 동시적 소프트웨어의 작성을 위한 도구이다. 2. volatile 은 읽기와 기록을 최적화로 제거하지 말아야 하는 메모리를 위한 것으로, 특별한 메모리를 다룰 때 필요한 도구이다. std::atomic 은 보통 뮤텍스보다 더 효율적인 기계어 명령들로 구현된다. std::atomic 을 사용하는 다음 예제 코드를 보자. std::atomi..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 39 : 단발성 사건 통신에는 void 미래 객체를 고려하라 핵심 : 1. 간단한 사건 통신을 수행할 때, 조건 변수 기반 설계에는 여분의 뮤텍스가 필요하고, 검출 과제와 반응 과제의 진행 순서에 제약이 있으며, 사건이 실제로 발생했는지를 반응 과제가 다시 확인해야 한다. 2. 플래그 기반 설계를 사용하면 그런 단점들이 없지만, 대신 차단이 아니라 폴링이 일어난다는 단점이 있다. 3. 조건 변수와 플래그를 조합할 수도 있으나, 그런 조합을 이용한 통신 메커니즘은 필요 이상으로 복잡하다. 4. std::promise 와 미래 객체를 사용..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 38 : 스레드 핸들 소멸자들의 다양한 행동 방식을 주의하라 핵심 : 1. 미래 객체의 소멸자는 그냥 미래 객체의 자료 멤버들을 파괴할 뿐이다. 2. std::async 를 통해 시동된 비지연 과제에 대한 공유 상태를 참조하는 마지막 미래 객체의 소멸자는 그 과제가 완료될 때까지 차단된다(기다린다). 합류 가능 std::thread 는 바탕 시스템의 실행 스레드에 대응된다. 그와 비슷하게 지연되지 않은 과제에 대한 미래 객체도 시스템 스레드에 대응된다. 따라서 std::thread 객체와 미래 객체 모두 시스템 스레드에 대한 핸들(ha..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 37 : std::thread 들을 모든 경로에서 합류 불가능하게 만들어라 핵심 : 1. 모든 경로에서 std::thread 를 합류 불가능으로 만들어라. 2. 소멸 시 join 방식은 디버깅하기 어려운 성능 이상으로 이어질 수 있다. 3. 소멸 시 detach 방식은 디버깅하기 어려운 미정의 행동으로 이어질 수 있다. 4. 자료 멤버 목록에서 std::thread 객체를 마지막에 선언하라. 모든 std::thread 객체는 합류 가능(joinable) 상태이거나 합류 불가능(unjoinable) 상태이다. 합류 가능 std::thre..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 36 : 비동기성이 필수일 때에는 std::launch::async 를 지정하라 핵심 : 1. std::async 의 기본 시동 방침은 과제의 비동기적 실행과 동기적 실행을 모두 허용한다. 2. 그러나 이러한 유연성 때문에 thread_local 접근의 불확실성이 발생하고, 과제가 절대로 실행되지 않을 수도 있고, 시간 만료 기반 wait 호출에 대한 프로그램 논리에도 영향이 간다. 3. 과제를 반드시 비동기적으로 실행해야 한다면 std::launch::async 를 지정하라. std::async 그 함수를 비동기적으로 실행하겠다는 의..
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 35 : 스레드 기반 프로그래밍보다 과제 기반 프로그래밍을 선호하라 핵심 : 1. std::thread API 에서는 비동기적으로 실행된 함수의 반환값을 직접 얻을 수 없으며, 만일 그런 함수가 예외를 던지면 프로그램이 종료된다. 2. 스레드 기반 프로그래밍에서는 스레드 고갈, 과다구독, 부하 균형화, 새 플랫폼으로의 적응을 독자가 직접 처리해야 한다. 3. std::async 와 기본 시동 방침을 이용한 과제 기반 프로그래밍은 그런 대부분의 문제를 알아서 처리해준다. doAsyncWork 라는 함수를 비동기적으로 실행한다고 하자. 방..