[C/C++] 중구난방 스터디 요약 1. NULL 포인터를 리턴하는 new 연산자 : 동적 메모리 할당이 실패로 돌아가는 경우, 옛날 표준의 경우 new 연산자는 NULL을 리턴하였다. 하지만 오늘날의 경우에는 헤더 파일 new에 선언되어 있는 bad_alloc 예외가 전달된다. 하지만 그 형태는 컴파일러 별로 다를 수 있으니 확인이 필요하다. 2. 디폴트 매개 변수와 함수 오버로딩 사용시 주의 사항 : #include int func(int a = 10){ return a+1; } int func(void){ return 10; } int main(void){ std::cout 더보기 [Effective C++ 요약] 11. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자. class Widget{...}; Widget w; ... w = w; 혹은, a[i] = a[j]; *px = *py; 이상과 같은 경우에는 자기대입 혹은 중복참조가 일어날 가능성을 내포하고 있는 코드이다. 이런 경우, 만약 둘 다 같은 주소를 참조하고 있는 경우에 있어, 어느 한쪽이 해제가 될 경우 문제 발생의 원인이 될 수 있다. 다음을 보자. class Bitmap {....}; class Widget { ... private: Bitmap *pb; }; Widget& Widget::operator=(const Widget& rhs) { delete pb; pb = new Bitmap(*rhs.pb); return *this; } 이 상황에서 만약 pb와 rhs가 같은 객체를 가리키고 있다면?? .. 더보기 [Effective C++ 요약] #7 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하라. class TimeKeeper{ public: TimeKeeper(); ~TimeKeeper(); ... }; class AtomicClock:public TimeKeeper{...}; class WaterClock:public TimeKeeper{...}; class WristWatch:public TimeKeeper{...}; * 팩토리 함수(Factory Function, 새로 생성된 파생 클래스 객체에 대한 기본 클래스 포인터를 반환하는 함수) TimeKeeper* ptk = getTimeKeeper(); ... delete ptk; 여기서 getTimeKeeper()가 AtomicClock 객체에 대한 포인터를 반환한다고 했을 때, 해당 객체는 동적 생성이므로 힙(heap)에 위치하게 된다. 객.. 더보기 이전 1 ··· 3 4 5 6 7 8 9 ··· 61 다음