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
- enumasByue
- 데이터애셋
- 정렬
- 알고리즘
- dataasset
- unorder_map
- 정렬알고리즘
- stl
- 스마트포인터
- moreeffectiveC++
- 자료구조
- map
- 람다
- 델리게이트
- 약참조
- 애셋로드
- C++
- 강참조
- 언리얼가비지컬렉터
- 프로그래머스
- 언리얼엔진구조체
- UE4 커스텀로그
- 크리티컬섹션
- 람다사용정렬
- C++최적화
- UE_LOG
- BFS
- UELOG
- UML관련
- 선택정렬
Archives
- Today
- Total
기억을 위한 기록들
[CPP-effective] 2-1 C++가 은근슬쩍 만드는 함수를 주의하자. 본문
일부 멤버 함수들은 C++에서 클래스 안에 직접 선언해 넣지 않으면 컴파일러가 자동으로 선언해주도록 되어 있습니다.
바로.
1. 복사 생성자(copy constructor)
2. 복사 대입 연산자(copy assignment operator)
3. 소멸자(destructor)
4. 기본 생성자 (선언 해놓지 않았다면)
가 있습니다.
컴파일러가 만드는 함수의 형태는 모두 기본형이다. 모두 public 멤버이며 inline 함수입니다.
class Player {};
이렇게 선언한 클래스와 아래와 같이 선언한 클래스가 대동소이하다는 것입니다.
class Player
{
public:
Player() // 기본생성자
{}
Player(const Player& rhs) //복사 생성자
{}
~Player() //소멸자 *소멸자는 항상 가상 소멸자가 좋습니다.
{}
Player operator=(const Player& rhs) //복사 대입 연산자
{}
};
이들은 꼭 필요하다고 컴파일러가 판단할 때만 만들어지도록 되어 있지만, 필요한 조건이 대단하진 않습니다.
Player p1; //기본생성자 그리고 소멸자
Player p2(p1) // 복사 생성자
p1=p2; //대입연산자
하지만, 작성자가 기본 생성자를 선언하지 않고, 파라미터를 받은 생성자만 선언해놓았다면, 컴파일러는 기본 생성자를 만들지 않는다.
정리
* 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있습니다..
다른 또 하나의 방법으로는
* 컴파일러에서 자동으로 제공하는 기능을 허용치 않으려면, 대응 되는 멤버 함수를 private선언한 후에 구현은 하지 않은 채로 두는 방법이다.
'C & CPP > Effective C++' 카테고리의 다른 글
[CPP-effective] 2-3 예외가 소멸자를 떠나지 못하도록 붙들어 놓자.(보류) (0) | 2021.03.15 |
---|---|
[CPP-effective] 2-2 다형성을 가진 클래스의 소멸자는 반드시 가상 소멸자로 선언하자. (0) | 2021.03.11 |
[CPP-effective] 1-3 객체를 사용하기전에는 초기화를하자. (0) | 2021.03.01 |
[CPP-effective] 1-2 낌새만 보이면 const를 넣자. (0) | 2021.02.23 |
[CPP-effective] 1-1 #define쓰려거든 다른걸 떠올리자. (0) | 2021.02.21 |