EC++ 검색 결과
이유 1. 객체의 생성과 소멸과정 중 가상 함수가 날라간 상태라면 신비로운 동작을 하기 때문이다. 왜냐하면 파생 객체가 만들어 질때, 베이스 생성자가 호출되는 동안은 베이스 생성자만 초기화 값을 가지고 있고 베이스 클래스의 소멸자가 호출되어 질때, 이미 파생 클래스의 데이터들은 이미 소멸되었기 때문에, 파생클래스 쪽으로 내려가서 호출되어지지 않기 때문이다! 주의점 1. 객체의 생성과 소멸 시점에 대해서 숙지하고 있어야 한다. 참조 구역 참조 참조 상속 관계에 있는 객체의 생성자와 소멸자 호출 시점 1. 생성자 호출 시점 첫째, 베이스 생성자 호출 후 베이스 생성자의 멤버 객체들 초기화 둘째, 파생 생성자 호출 후 파생 생성자의 멤버 객체들 초기화 2. 소멸자 호출 시점 첫째, 파생 소멸자 호출 후 파생 ..
이유 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_..
이유 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. 멤버 초기화 리스트란? 코드의 주석을 보면 이해가..
최근댓글