본문 바로가기

전체 글162

Effective C++ 2. 생성자, 소멸자 및 대입 연산자 생성자- 새로운 객체를 메모리에 만드는 데 필요한 과정을 제어하고 객체의 초기화를 맡는 함수소멸자- 객체를 없앰과 동시에 그 객체가 메모리에서 적절히 사라질 수 있도록 하는 과정을 제어하는 함수대입 연산자- 기존의 객체에 다른 객체의 값을 줄 때 사용하는 함수 항목 5 : C++가 은글쓸쩍 만들어 호출해 버리는 함수들에 촉각을 세우자class Empty{public: Empty() {...} // 기본 생성자 Empty(const Empty& rhs) {...} // 복사 생성자 ~Empty() {...} // 소멸자 Empty& operator=(const Empty& rhs) {...} // 복사 대입 연산자}- C++의 복사 생성자(copy constructor), 복.. 2026. 9. 2.
Effective Modern C++ 3장 : 현대적인 C++에 적응하기 (2) 항목 14: 예외를 방출하지 않을 함수는 noexcept로 선언하라프로그래머는 함수가 방출할(emit) 수 있는 예외 형식들은 요약해야 했으며, 그래서 함수의 구현을 수정하면 예외 명세도 바꾸어야 할 가능성이 생겼다.즉, 의미있는 것은 함수가 예외를 하나라도 던질 수 있는지 아니면 절대로 던지지 않는지라는 이분법적 정보뿐이다.C++11에서 함수 선언 시 그 함수가 예외를 방출하지 않을 것임을 명시할 때에는 noexcept라는 키워드를 사용하면 된다. 함수를 noexcept로 선언할 것인지의 여부는 인터페이스 설계상의 문제이다.컴파일러가 더 나은 목적 코드(object code)를 산출할 수 있다는 것이다.int f(int x) throw(); // f는 예외를 방출하지 않음: C++98 방식int f(i.. 2026. 8. 4.
Effective Modern C++ 3장 : 현대적인 C++에 적응하기 (1) - C++11, C++14에는 auto, 스마트 포인터, 이동 시멘틱, 람당, 동시성 지원 라이브러리의 기능들이 추가되었다. 항목 7 : 객체 생성 시 괄호()와 중괄호{}를 구분하라- C++11에서는 초기화 값을 괄호로 지정할 수도 있고, 등호로 지정할 수도 있고, 중괄호로 지정할 수도 있다int x(0); // 초기치를 괄호로 감싼 예int y=0; // 초기치를 "=" 다음에 지정한 예int z{0}; // 초기치를 중괄호로 감싼 예int z={0}; // "="와 중괄호로 초기치를 지정한 예Widget w1; // 기본 생성자를 호출 Widget w2=w1; // 배정이 아님. 복사 생성자를 호출w1=w2; // 배정; 복사 배정 연산자(operator=)를 호출- 여러 가지 초기화 구문이 주는 .. 2026. 7. 7.
Effective Modern C++ 2장 : auto - auto를 사용하면 형식을 직접 지정했을 때 겪게 되는 정확성 문제와 성능 문제를 방지할 수 있다- 그러나 가끔은 auto가 프로그래머가 보기에 아주 엉뚱한 형식을 연역하기도 한다 항목 5 : 명시적 형식 선언보다는 auto를 선호하라명시적 선언을 할 때- 초기화하지 않았던 것을 잊을 때가 있다- 간단한 선언을 하지 못한다- 클로저(캡처)의 형식으로 지역 변수를 선언할 때, 클로저(캡처)의 형식은 컴파일로만 알고 있으므로, 명시적으로 지정하는 것은 불가능하다 C++11부터는 auto는 위의 문제점들이 사라진다- auto 변수의 형식은 해당 초기치로부터 연역되므로, 반드시 초기치를 제공해야 한다int x1; // 문맥에 따라서는 초기화되지 않을 수 있음auto x2; // 오류! 초기치가 꼭 필요함au.. 2026. 6. 29.