어떤 경우이냐면? 1. 클래스의 멤버 모든 객체를 초기화를 하려 할때 memset(this, 0, sizeof(this); 를 이용할 경우 왜냐하면 1. 가상테이블이나, 0으로 초기화 되면 안되는 것들이 0으로 초기화 되기 때문에, 이런 객체 사용시 신비스러운 동작을 한다. 주의점 1. 정확하게 해당 클래스의 데이터영역과 0으로 채워져야 할 부분을 제외하고 한다면 문제는 없지만, 조금 편해지려고 찾기 힘든 벌레를 키울수 있는 점은 이해해 두고 있어야 한다. 관련 링크 http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=97
전체 글 검색 결과
이유 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. 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. 복사 대입 연산자만은 꼭 정의해두지 않으면 무조건 ..
최근댓글