이유 1. 메모리 릭 또는 프로그램 강제 종료를 일으킬수 있기 때문이다. 주의점 1. 관련 링크를 꼭 보도록 참조 1. 예외가 일어날 가능성이 있는 코드는 소멸자가 아닌 멤버 함수에 꼭 넣도록 해야 한다. 이것만은 잊지 말자! 1. 소멸자에서 예외가 빠져나가게 하지 말자. 2. 어떤 클래스의 연산이 진행되더가 던져진 예외에 대해서 사용자가 반응해야 할 필요가 있다면, 해당 연산을 제공하는 함수는 꼭 보통의 함수여야 한다. 관련링크 http://ikpil.tistory.com/365 http://redinlife.egloos.com/1627105 http://ilu8318.egloos.com/1705005 http://flashcafe.org/bbs/board.php?bo_table=programming_..
책 정리/Effective C++ 3판 검색 결과
정말 제목이 .. 구체적이다. 이유 1. 다향성을 가진 기본 클래스는 파생클래스의 소멸자도 호출해줌으로써, 메모리릭, 신비한 현상 등을 막을수 있기 때문이다. 주의점 1. virtual 의 비용에 대해서 분명 알고 있어야 한다. 참조링크 : http://ikpil.tistory.com/380 2. 순수 가상 소멸자를 사용한다면, 정의를 꼭 써두어야 한다. 왜냐하면 http://www.kwak101.pe.kr/bbs/view.php?id=kwk_worksBBS&no=159 이기 때문이다. 참조 - 기본 클래스의 가상 소멸자로 인한 파생 클래스의 소멸 시점 1. 기본 클래스의 가상 소멸자 호출 2. 1번으로 부터 파생 클래스의 소멸자 호출 3. 2번으로 부터 기본 클래스의 소멸자 호출 - 순수 가상 소멸자의..
이유 1. 벨레 자체가 꼬이지 않게 하는게 좋기 때문이다. 구현방법 1. 인터페이스가 public인 컴파일러가 만들어낸 함수를 private에 넣어 버리면 된다. 주의점 1. private에 넣을시, 선언만 써둔다. 왜냐하면 만약 사용된다 하더라도(friend를 이용하여) 링커 타임에서 에러를 발생 시켜 줄수 있다. 참조 1. 상속관계를 통하여, 컴파일 타임에 에러를 발생시킬수도 있지만, 기교로써 알아두면 좋을듯 싶다. 예) http://gpgstudy.com/forum/viewtopic.php?t=18793&view=next&sid=7724c553f2ffd89aab0a8fc4930407fb http://yesarang.tistory.com/42 http://www.boost.org/doc/libs/1_..
이유 1. 은글슬쩍 만들어 호출해 버리는 함수들이 벌레의 밥이기 때문이다. 주의점 1. 은근슬쩍 만들어 호출하는 함수들은 - 기본 생성자 : Empty(){ .. } 를 말함 - 복사 생성자 : Empty(const Empty& rhs) { .....} 를 말함 - 소멸자 : ~Empty() { ...} 를 말함 - 복사 대입 연산자 : Empty& operator= (const Empty& rhs){ ....} 를 말함 참조 1. 기본 생성자는 복사 생성자를 제외한 생성자를 만들면 C++이 만들어 주지 않는다. 2. 복사 생성자만은 꼭 정의해두지 않으면 무조건 만들어 준다. 3. 소멸자만은 꼭 정의해두지 않으면 무조건 기본 소멸자가 만들어 진다. 4. 복사 대입 연산자만은 꼭 정의해두지 않으면 무조건 ..
부재 : 멤버 객체의 생성 시점과 초기화와 시점 이유 1. 초기화 되지 않은 객체 사용시, 신비롭게 동작하는 현상을 볼수 있기 때문이다. 멤버 객체 생성 시점 1. 초기화 리스트 발동 시점에 생성 된다. 주의점 1. 상수나 참조자는 대입 자체가 불가능하기 때문에 초기화 리스트를 사용하여 초기화 하여야 한다. 2. 멤버 초기화 리스트에서 초기화 하는것이 더 좋다. 왜냐하면 멤버 초기화 리스트는 객체의 생성단계이기 때문이다. 3. 클래스에 나열한 객체의 순서대로 객체가 생성되므로 초기화 리스트 작성시 유념해야 한다. (단순한 초기화 라면 문제는 없지만, 멤버객체를 이용한 객체 초기화 시에는 문제 발생이 생긴다. 증명 소스코드는 참조링크를 확인할것) 참조 1. 멤버 초기화 리스트란? 코드의 주석을 보면 이해가..
이유 1. 의미적으로 상수로 표현하기보단 실질적으로 상수로 표현하는 const가 더 안정적이기 때문이다. (함수 내부에서 값을 건드리지 않는다는 의미만 가지고 코딩할게 아니라 진짜로 표현하는게 더 좋기 때문이다) 주의점 1. 함수의 반환값 함수의 매개변수, 함수의 정의 구역을 모두 const로 할수 있는지 생각해 보아야 한다. 2. 상수객체와 비상수객체는 함수의 오버로딩 대상에 포함된다. - 즉 상수객체만 받거나 비상수객체만 받거나 둘의 차이를 인정한다는 것이다. 3. 상수 멤버 함수의 반환값이 참조자라면, 상수형 참조자를 반환할수 있게 만들어야 한다. - 왜냐하면 기본제공 타입을 반환하는 함수의 반환값 수정은 공통적으로 안되는 규칙을 따르기 위함이다. 참조 const에 "상수형" 이라는 말을 붙여버려서..
최근댓글