일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- baekjoon
- DirectX11
- C
- Programmers
- 1563
- const
- 언리얼엔진5
- 프로그래머스
- C++
- 2294
- UnrealEngine4
- RVO
- 줄 세우기
- softeer
- RootMotion
- 백준
- GeeksForGeeks
- winapi
- TObjectPtr
- Frustum
- NRVO
- 티스토리챌린지
- Unreal Engine5
- IFileDialog
- algorithm
- directx
- UE5
- 오블완
- 팰린드롬 만들기
- UnrealEngine5
- Today
- Total
목록C++/Effective C++ (2)
Game Develop

어떤 객체의 인스턴스한테 유일성을 보장해주고싶을 때가 있다고 가정해보자.그러면 인스턴스를 만들면 그것과 동일한게 있으면 안되니 복사생성자나 복사대입연산자를 허용하면 안된다. 이럴 때 먼저 가장 손쉬운방법은 복사생성자나 복사대입연산자를 private으로 선언해버리는 것이다.private이니 외부에서 호출할 수 없게 만들어버렸다는 느낌이다. 하지만 이 방법은 100% 완벽하지 않다.왜냐면 클래스의 멤버함수나 프렌드함수에서 해당 복사생성자나 복사대입연산자를 호출해버릴수도 있기 때문이다. 멤버함수에서의 호출까지 막을려면 그냥 복사생성자, 복사대입연산자를 '선언'만 하는 것이다.실제로 이 방법은 C++의 iostream 라이브러리의 몇몇 클래스에서 실제로 적용한 복사방지법이라고 하니, 필요할 때 써먹어도 될 것 ..
제목을 다시 바꿔말하면.. 멤버 초기화 리스트를 사용해 멤버변수들을 초기화하자. C++규칙에 의하면 어떤 객체이든 그 객체의데이터 멤버는 '생성자의 본문'이 실행되기 전에 초기화되어야 한다고 명시되어있다. Foo::Foo(const string& name, const int count) { this->m_Name = name; this->m_Count = count; } 위 코드에서 멤버변수들은 초기화되었는가? 아니다. '생성자의 본문'이 실행되기 전에 초기화 되어야 한다고 되어있는데, 위 코드는 본문에서 멤버변수에 '대입'을 했을 뿐이다. 그리고 좀 더 정확히는 저 대입연산을 하기전에 멤버변수들의 기본생성자들이 호출되어서 값을 초기화했을 것이다.근데 m_C..