본문 바로가기

c++ 언어/Effective C++

(14)
항목 13 : 자원 관리에는 객체가 그만! (1) 여기서 부터는 내용이 어려워 진다.준비할게 있는데 boost 라이브러리전 우분투가 있어서 sudo apt-get install libboost-dev libboost-doc 요것만 하면 알아서 install 우분투 짱임shared_ptr 에 대해 알아야 한다. auto_ptr 도 있는데 shared_ptr 에 익숙해 져야 한다.이게 boost 라이브러리에 서 사용하는 클래스이다. 일단 shared_ptr 에 대해 익숙해 져야 한다.자세한 사용법은 네이버에서 검색해서 스터디 하시고shared_ptr 사용시 주의 해야 될 점...class A{public: A() { std::cout
항목 12 : 객체의 모든 부분을 빠짐없이 복사하자 class Child : public Parent{ public: Child(Child& rhs) : Parent(rhs);};Child operator =(const Child& rhs){ .... Operator::operator =(rhs);} 위의 문장으로 충분할까?class 에서 유지보수로 인한 맴버변수 추가가 이루어 졌을 때 위의 코드처럼 자식클래스에서 부모클래스를 초기화 하는 코드를 꼭 넣자주요 사항은 생성자(복사), 소멸자, operator 연산자
operator =에서는 자기대입에 대한 처리가 빠지지 않도록 하자 예제Widget& Widget::operator =(const Widget& rhs){ delete pb; pb = new Bitmap(*rhs.pb); return *this;}맴버변수 pb 에 있는 메모리 해제하고 재할당하는 코드이다.딱 봐도 문제 없네라고 생각하면 문제 있다.일단 delete 하기 전에 pb 가 NULL 이 아닌지 체크 해야되는데그것도 있고 자기 대입연산이 문제가 된다.자기 자신을 대입하면 자기 자신도 delete , rhs 도 delete ...ㅋ if(this == &rhs) return *this;자기 자신 대입이라면 이처럼 그냥 리턴하면 된다. Effective에서는 개선된 방향으로Widget& Widget::operator =(const Widget& rhs){ Bitmap..
항목 10 : 대입 연산자는 *this의 참조자를 반환하게 하자 operator 에서 대입연산자 = , -= += 요런거*this 로 리턴하자 다들 이렇게 쓴다니까 ...그리고 operator 로 연산자 쓸때 맴버함수로 할지 friend 함수로 할지 고민이 있는데 지금처럼 대입연산자는 맴버함수로 하고나머지는 friend 로 한다. 이건 그냥 내 생각이다.
항목 9 : 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 class Trans{public: Trans(); virtual void logTrans() const { cout
항목 8 : 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 내용은 소멸자에서 예외가 발생시에 무슨 일이 있어도 소멸자 내부에서예외를 처리해야 한다는 거다난 잘 모르것다예외처리보다 return 문이 더 보기좋은데...더군다나 try catch 문 잘못쓰면 코드가 짜증날거 같다
항목 7 : 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 include using namespace std; class AWOV{public: AWOV() { cout
항목 6 : 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자 어려운 내용은 아니다생성자를 private 선언으로만 두면 막을수 있고책에서는 부모클래스의 생성자를 private 으로 두고 실제 자식클래스에 상속을 하는 방법도 있다고 한다.너무 대충하는 건가 ㅋㅋ