Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 델리게이트
- 정렬알고리즘
- 강참조
- UE4 커스텀로그
- moreeffectiveC++
- 언리얼가비지컬렉터
- stl
- 스마트포인터
- 람다
- map
- 약참조
- BFS
- C++최적화
- dataasset
- 알고리즘
- UE_LOG
- 람다사용정렬
- enumasByue
- 애셋로드
- 언리얼엔진구조체
- 크리티컬섹션
- 정렬
- 선택정렬
- UML관련
- UELOG
- C++
- 프로그래머스
- 자료구조
- 데이터애셋
- unorder_map
Archives
- Today
- Total
기억을 위한 기록들
[CPP-effective] 2-4 객체 생성/소멸 과정 중에는 가상함수를 호출하지말자. 본문
이유는 2가지로
첫 번째는 호출 결과가 원하는 대로 돌아가지 않고,
두 번째로는 원하는 대로 돌아간다고 해도 뭔가 굉장히 이상할 것이다.
예를 들어
class Player {
public:
Player()
{
log();
}
virtual void log()
{
cout << "Player Log" << endl;
}
};
class AnotherPlayer : public Player
{
public:
//..
virtual void log()
{
cout << "Another Player Log" << endl;
}//호출
};
여기서 AnotherPlayer 생성자를 호출할 때, Player의 생성자도 호출이 된다.
그러면서 자동으로 log 함수도 호출이 되는데, 문제가 바로 AnotherPlayer의 log 함수가 아니라 Player의 log함수가 호출되는 것이다.
* 정리
생성자 or소멸자 안에서 가상 함수를 호출하지 말자.
가상 함수라고 해도, 지금 실행 중인 생성자나 소멸자에 해당되는 클래스의 자식 클래스 쪽으로는 내려가지 않는다.
'C & CPP > Effective C++' 카테고리의 다른 글
[CPP-effective] 2-6 operator=에는 자기대입에 대한 처리를 빼먹지 말자. (0) | 2021.03.30 |
---|---|
[CPP-effective] 2-5 대입 연산자는 *this의 참조자를 반환하게 하도록 (0) | 2021.03.22 |
[CPP-effective] 2-3 예외가 소멸자를 떠나지 못하도록 붙들어 놓자.(보류) (0) | 2021.03.15 |
[CPP-effective] 2-2 다형성을 가진 클래스의 소멸자는 반드시 가상 소멸자로 선언하자. (0) | 2021.03.11 |
[CPP-effective] 2-1 C++가 은근슬쩍 만드는 함수를 주의하자. (0) | 2021.03.05 |