본문 바로가기
반응형

effective3

Effective C++ 항목18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 Effective C++ 항목18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 클래스를 설계할 때, 함수 인자가 비슷하면 실수할 우려가 있다! class Date { public: Date(int month, int day, int year); }; // month 와 day 를 거꾸로 적음. int형이기 때문에 정상적으로 프로그램이 진행된다.. Date d1(12, 3, 2023); // day를 31을 초과한 값으로 넣어줌. int형이므로 당연히 에러는 나지 않는다.. Date d2(3, 91, 2023); 위의 Date 클래스의 경우, 월과 일을 반대로 적거나 허용할 수 없는 값이 인자로 들어갈 수 있다. 심지어 컴파일 에러도 발생하지 않는다! 이러한 실수를 방지하려면 연.. 2023. 3. 12.
Effective C++ 항목10: 대입 연산자는 *this의 참조자를 반환하게 하자 Effective C++ 항목10 대입 연산자는 *this의 참조자를 반환하게 하자 C++의 대입 연산자는 여러 개가 사슬처럼 엮일 수 있다. int x, y, z; x = y = z = 15; // 위 식은 아래와 같이 처리됨 x = (y = (z = 15))); 위와 같은 관례를 지키는 것이 편한 길. 따라서 각종 객체의 대입 연산자는 좌변 인자에 대한 참조자를 반환해야함 연산자 =, +=, -=의 경우 아래와 같은 꼴로 반환 처리 class Widget { public: Widget& operator=(const Widget& rhs) // =연산자 { ... return *this; } Widget& operator+=(const Widget& rhs) // +=연산자 { ... return *t.. 2023. 2. 13.
Effective C++ 항목8 : 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 Effective C++ 항목8 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 클래스의 인스턴트, 즉 객체가 소멸할 때 각종 예외를 처리할 수 있다. class DBConnection { public: ... static DBConnection create(); void close(); }; class DBConn // DBConnection 객체를 관리하는 클래스 { public: ... ~DBConn() { db.close(); } // 데이터베이스 연결이 항상 닫히도록 // 확실히 챙겨주는 함수 private: DBConnection db; }; 소멸자의 db.close()에서 예외가 발생할 수 있음. 대응책은? 1) 프로그램을 바로 끝내버림. abort()호출 DBConn::~DBConn() { t.. 2023. 2. 6.
반응형