본문 바로가기

c++ 언어

(20)
항목 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
쉬어가기 코너 면접다니고 잇는데 졸래 힘들다 이게 은근히 스트레스 이고 날씨가 풀리면 여행이나 가야것다 c++ 에서 include 문 이 있는데 c 언어 include 에 c 만 추가되어서 들어간게 잇다무슨 차이인지 궁금해서 지금까지 관심없다가 잠도 안오고 한번 열어봤다 cstdio