Notice
Recent Posts
Recent Comments
Link
관리 메뉴

λͺ©λ‘μ „체 κΈ€ (1099)

KoreanFoodie's Study

Effective C++ | ν•­λͺ© 52 : μœ„μΉ˜μ§€μ • new λ₯Ό μž‘μ„±ν•œλ‹€λ©΄ μœ„μΉ˜μ§€μ • delete 도 같이 μ€€λΉ„ν•˜μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 52 : μœ„μΉ˜μ§€μ • new λ₯Ό μž‘μ„±ν•œλ‹€λ©΄ μœ„μΉ˜μ§€μ • delete 도 같이 μ€€λΉ„ν•˜μž 핡심 : 1. operator new ν•¨μˆ˜μ˜ μœ„μΉ˜μ§€μ •(placement) 버전을 λ§Œλ“€ λ•ŒλŠ”, 이 ν•¨μˆ˜μ™€ 짝을 μ΄λ£¨λŠ” μœ„μΉ˜μ§€μ • λ²„μ „μ˜ operator delete ν•¨μˆ˜λ„ κΌ­ λ§Œλ“€μž. 이 일을 빼먹으면, 찾아내기도 νž˜λ“€κ³  생겼닀가 μ•ˆ 생겼닀 ν•˜λŠ” λ©”λͺ¨λ¦¬ λˆ„μΆœ ν˜„μƒμ„ κ²½ν—˜ν•˜κ²Œ λœλ‹€. 2. new 및 delete 의 μœ„μΉ˜μ§€μ • 버전을 μ„ μ–Έν•  λ•ŒλŠ”, μ˜λ„ν•œ 바도 μ•„λ‹Œλ° μ΄λ“€μ˜ ν‘œμ€€ 버전이 κ°€λ €μ§€λŠ” 일이 생기지 μ•Šλ„λ‘ μ£Όμ˜ν•˜μž. μ•„λž˜ μ½”λ“œλ₯Ό 보자. Widget *pW =..

Tutorials/C++ : Advanced 2022. 10. 26. 06:31
Effective C++ | ν•­λͺ© 51 : new 및 delete λ₯Ό μž‘μ„±ν•  λ•Œ 따라야 ν•  기쑴의 κ΄€λ‘€λ₯Ό 잘 μ•Œμ•„ λ‘μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 51 : new 및 delete λ₯Ό μž‘μ„±ν•  λ•Œ 따라야 ν•  기쑴의 κ΄€λ‘€λ₯Ό 잘 μ•Œμ•„ λ‘μž 핡심 : 1. κ΄€λ‘€μ μœΌλ‘œ, operator new ν•¨μˆ˜λŠ” λ©”λͺ¨λ¦¬ 할당을 λ°˜λ³΅ν•΄μ„œ μ‹œλ„ν•˜λŠ” λ¬΄ν•œ 루프λ₯Ό κ°€μ Έμ•Ό ν•˜κ³ , λ©”λͺ¨λ¦¬ ν• λ‹Ή μš”κ΅¬λ₯Ό λ§Œμ‘±μ‹œν‚¬ 수 없을 λ•Œ new 처리자λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•˜λ©°, 0λ°”μ΄νŠΈμ— λŒ€ν•œ λŒ€μ±…λ„ μžˆμ–΄μ•Ό ν•œλ‹€. 클래슀 μ „μš© 버전은 μžμ‹ μ΄ ν• λ‹Ήν•˜κΈ°λ‘œ μ˜ˆμ •λœ 크기보닀 더 큰(ν‹€λ¦°) λ©”λͺ¨λ¦¬ 블둝에 λŒ€ν•œ μš”κ΅¬λ„ μ²˜λ¦¬ν•΄μ•Ό ν•œλ‹€. 2. operator delete ν•¨μˆ˜λŠ” 널 포인터가 듀어왔을 λ•Œ 아무 일도 ν•˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€. 클래슀 μ „μš© λ²„μ „μ˜ ..

Tutorials/C++ : Advanced 2022. 10. 26. 06:29
κ²Œμž„μˆ˜ν•™ - κ·Ήμ’Œν‘œκ³„

μ΄λ“μš°λ‹˜μ˜ 'μ΄λ“μš°μ˜ κ²Œμž„μˆ˜ν•™' 책을 보며 쒋은 λ‚΄μš©μ„ μ •λ¦¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 더 μžμ„Έν•œ λ‚΄μš©μ΄ κΆκΈˆν•˜μ‹œλ‹€λ©΄, 책을 ꡬ맀해 직접 μ½μ–΄λ³΄μ‹œκΈ°λ₯Ό μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! κ·Ήμ’Œν‘œκ³„ μš°λ¦¬λŠ” 기본적으둜 데카λ₯΄νŠΈ μ’Œν‘œκ³„λ₯Ό 많이 μ΄μš©ν•˜λŠ”λ°, 사싀 νšŒμ „μ„ ν•  λ•Œλ§ˆλ‹€ x 와 y 의 λ³€ν™”λ₯Ό 맀번 κ³„μ‚°ν•˜λŠ” 것은 맀우 번거둜운 일일 수 μžˆλ‹€. 이 경우, μ›μ μœΌλ‘œλΆ€ν„°μ˜ 거리 r κ³Ό θ 의 두 μš”μ†Œλ‘œ κ΅¬μ„±λœ κ·Ήμ’Œν‘œκ³„(Polar coordinate system) 을 μ‚¬μš©ν•  수 μžˆλ‹€. 일반적으둜 arctan ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜λ©΄ λ²‘ν„°μ˜ 각도λ₯Ό μ–»μ–΄λ‚Ό 수 μžˆλŠ”λ°(tanθ = y/x μ΄λ―€λ‘œ, θ = arctan(y/x) 이 됨), arctan ν•¨μˆ˜λŠ” μΉ˜μ—­μ΄ -180λ„μ—μ„œ 180λ„κΉŒμ§€ 밖에 λ˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, x 와 y 값을 λ”°λ‘œ μ „..

Game Dev/Game Math 2022. 10. 26. 06:29
Effective C++ | ν•­λͺ© 50 : new 및 delete λ₯Ό μ–Έμ œ λ°”κΏ”μ•Ό 쒋은 μ†Œλ¦¬λ₯Ό 듀을지λ₯Ό νŒŒμ•…ν•΄ λ‘μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 50 : new 및 delete λ₯Ό μ–Έμ œ λ°”κΏ”μ•Ό 쒋은 μ†Œλ¦¬λ₯Ό 듀을지λ₯Ό νŒŒμ•…ν•΄ λ‘μž 핡심 : κ°œλ°œμžκ°€ 슀슀둜 μ‚¬μš©μž μ •μ˜ new 및 delete λ₯Ό μž‘μ„±ν•˜λŠ” λ°λŠ” μ—¬λŸ¬κ°€μ§€ μ΄μœ κ°€ μžˆλ‹€. μ—¬κΈ°μ—λŠ” μˆ˜ν–‰ μ„±λŠ₯ ν–₯상, νž™ μ‚¬μš© μ‹œμ˜ μ—λŸ¬ 디버깅, νž™ μ‚¬μš© 정보 μˆ˜μ§‘ λ“±μ˜ λͺ©μ μ΄ ν¬ν•¨λœλ‹€. operator new 와 operator delete λ₯Ό λ°”κΎΈλŠ” κ°€μž₯ ν”ν•œ μ„Έ 가지 이유λ₯Ό ν•œ 번 보자. 잘λͺ»λœ νž™ μ‚¬μš©μ„ νƒμ§€ν•˜κΈ° μœ„ν•΄ : 데이터 μ˜€λ²„λŸ°(overrun) 및 μ–Έλ”λŸ°(underrun) 을 νƒμ§€ν•˜κΈ° μœ„ν•΄ νƒμ§€μš© λ°”μ΄νŠΈλ₯Ό μΆ”κ°€λ‘œ ν• λ‹Ήν•  수 μžˆλ‹€..

Tutorials/C++ : Advanced 2022. 10. 25. 16:34
Effective C++ | ν•­λͺ© 49 : new 처리자의 λ™μž‘ 원리λ₯Ό μ œλŒ€λ‘œ μ΄ν•΄ν•˜μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 49 : new 처리자의 λ™μž‘ 원리λ₯Ό μ œλŒ€λ‘œ μ΄ν•΄ν•˜μž 핡심 : 1. set_new_handler ν•¨μˆ˜λ₯Ό μ“°λ©΄ λ©”λͺ¨λ¦¬ ν• λ‹Ή μš”μ²­μ΄ λ§Œμ‘±λ˜μ§€ λͺ»ν–ˆμ„ λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜λ₯Ό 지정할 수 μžˆλ‹€. 2. μ˜ˆμ™ΈλΆˆκ°€(nothrow) new λŠ” 영ν–₯λ ₯이 μ œν•œλ˜μ–΄ μžˆλ‹€. λ©”λͺ¨λ¦¬ ν• λ‹Ή μžμ²΄μ—λ§Œ 적용되기 λ•Œλ¬Έμ΄λ‹€. 이후에 ν˜ΈμΆœλ˜λŠ” μƒμ„±μžμ—μ„œλŠ” μ–Όλ§ˆλ“ μ§€ μ˜ˆμ™Έλ₯Ό 던질 수 μžˆλ‹€. λ©”λͺ¨λ¦¬ 할당이 μ œλŒ€λ‘œ λ˜μ§€ λͺ»ν–ˆμ„ λ•Œ, operator new λŠ” μ˜ˆμ™Έλ₯Ό λ˜μ§€κΈ° μ „ μ‚¬μš©μž μͺ½μ—μ„œ 지정할 수 μžˆλŠ” μ—λŸ¬ 처리 ν•¨μˆ˜λ₯Ό μš°μ„ μ μœΌλ‘œ ν˜ΈμΆœν•œλ‹€. 이 ν•¨μˆ˜λ₯Ό new 처리자(new-ha..

Tutorials/C++ : Advanced 2022. 10. 25. 16:33
Effective C++ | ν•­λͺ© 48 : ν…œν”Œλ¦Ώ λ©”νƒ€ν”„λ‘œκ·Έλž˜λ°, ν•˜μ§€ μ•Šκ² λŠ”κ°€?

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 48 : ν…œν”Œλ¦Ώ λ©”νƒ€ν”„λ‘œκ·Έλž˜λ°, ν•˜μ§€ μ•Šκ² λŠ”κ°€? 핡심 : 1. ν…œν”Œλ¦Ώ λ©”νƒ€ν”„λ‘œκ·Έλž˜λ°μ€ κΈ°μ‘΄ μž‘μ—…μ„ λŸ°νƒ€μž„μ—μ„œ 컴파일 νƒ€μž„μœΌλ‘œ μ „ν™˜ν•˜λŠ” 효과λ₯Ό λ‚Έλ‹€. λ”°λΌμ„œ TMP λ₯Ό μ“°λ©΄ μ„ ν–‰ μ—λŸ¬ 탐지와 높은 λŸ°νƒ€μž„ νš¨μœ¨μ„ 손에 κ±°λ¨Έμ₯˜ 수 μžˆλ‹€. 2. TMP λŠ” μ •μ±… μ„ νƒμ˜ 쑰합에 κΈ°λ°˜ν•˜μ—¬ μ‚¬μš©μž μ •μ˜ μ½”λ“œλ₯Ό μƒμ„±ν•˜λŠ” 데 μ“Έ 수 있고, νŠΉμ • νƒ€μž…μ— λŒ€ν•΄ λΆ€μ μ ˆν•œ μ½”λ“œκ°€ λ§Œλ“€μ–΄μ§€λŠ” 것을 λ§‰λŠ” 데도 μ“Έ 수 μžˆλ‹€. ν…œν”Œλ¦Ώ λ©”νƒ€ν”„λ‘œκ·Έλž˜λ°(template metaprogramming: TMP) λŠ” 컴파일 도쀑에 μ‹€ν–‰λ˜λŠ” ν…œν”Œλ¦Ώ 기반의 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 일을..

Tutorials/C++ : Advanced 2022. 10. 25. 16:33
Effective C++ | ν•­λͺ© 47 : νƒ€μž…μ— λŒ€ν•œ 정보가 ν•„μš”ν•˜λ‹€λ©΄ νŠΉμ„±μ •λ³΄ 클래슀λ₯Ό μ‚¬μš©ν•˜μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 47 : νƒ€μž…μ— λŒ€ν•œ 정보가 ν•„μš”ν•˜λ‹€λ©΄ νŠΉμ„±μ •λ³΄ 클래슀λ₯Ό μ‚¬μš©ν•˜μž 핡심 : 1. νŠΉμ„±μ •λ³΄ ν΄λž˜μŠ€λŠ” 컴파일 도쀑에 μ‚¬μš©ν•  수 μžˆλŠ” νƒ€μž… κ΄€λ ¨ 정보λ₯Ό λ§Œλ“€μ–΄λ‚Έλ‹€. λ˜ν•œ νŠΉμ„±μ •λ³΄ ν΄λž˜μŠ€λŠ” ν…œν”Œλ¦Ώ 및 ν…œν”Œλ¦Ώ 특수 버전을 μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•œλ‹€. 2. ν•¨μˆ˜ μ˜€λ²„λ‘œλ”© 기법과 κ²°ν•©ν•˜μ—¬ νŠΉμ„±μ •λ³΄ 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄, 컴파일 νƒ€μž„μ— κ²°μ •λ˜λŠ” νƒ€μž…λ³„ if...else 점검문을 ꡬ사할 수 μžˆλ‹€. STL μ—λŠ” container, iterator, algorithm 말고도 utility 라고 λΆˆλ¦¬λŠ” ν…œν”Œλ¦Ώλ„ λͺ‡ 개 λ“€μ–΄ μžˆλ‹€. 이듀 쀑 advance λΌλŠ”, μ§€μ •λœ ..

Tutorials/C++ : Advanced 2022. 10. 25. 16:33
Effective C++ | ν•­λͺ© 46 : νƒ€μž… λ³€ν™˜μ΄ λ°”λžŒμ§ν•  κ²½μš°μ—λŠ” 비멀버 ν•¨μˆ˜λ₯Ό 클래슀 ν…œν”Œλ¦Ώ μ•ˆμ— μ •μ˜ν•΄ λ‘μž

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 46 : νƒ€μž… λ³€ν™˜μ΄ λ°”λžŒμ§ν•  κ²½μš°μ—λŠ” 비멀버 ν•¨μˆ˜λ₯Ό 클래슀 ν…œν”Œλ¦Ώ μ•ˆμ— μ •μ˜ν•΄ λ‘μž 핡심 : λͺ¨λ“  λ§€κ°œλ³€μˆ˜μ— λŒ€ν•΄ μ•”μ‹œμ  νƒ€μž… λ³€ν™˜μ„ μ§€μ›ν•˜λŠ” ν…œν”Œλ¦Ώκ³Ό 관계가 μžˆλŠ” ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜λŠ” 클래슀 ν…œν”Œλ¦Ώμ„ λ§Œλ“€λ €κ³  ν•œλ‹€λ©΄, 이런 ν•¨μˆ˜λŠ” 클래슀 ν…œν”Œλ¦Ώ μ•ˆμ— ν”„λ Œλ“œ ν•¨μˆ˜λ‘œμ„œ μ •μ˜ν•œλ‹€ λ‹€μŒκ³Ό 같은 유리수 계산 ν΄λž˜μŠ€κ°€ μžˆλ‹€κ³  ν•΄ 보자. template class Rational { public: Rational(const T& numerator = 0, const T& denominator = 1); const T numerator() const;..

Tutorials/C++ : Advanced 2022. 10. 25. 16:32
Effective C++ | ν•­λͺ© 45 : "ν˜Έν™˜λ˜λŠ” λͺ¨λ“  νƒ€μž…"을 λ°›μ•„λ“€μ΄λŠ” λ°λŠ” 멀버 ν•¨μˆ˜ ν…œν”Œλ¦Ώμ΄ 직방!

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 45 : "ν˜Έν™˜λ˜λŠ” λͺ¨λ“  νƒ€μž…"을 λ°›μ•„λ“€μ΄λŠ” λ°λŠ” 멀버 ν•¨μˆ˜ ν…œν”Œλ¦Ώμ΄ 직방! 핡심 : 1. ν˜Έν™˜λ˜λŠ” λͺ¨λ“  νƒ€μž…μ„ λ°›μ•„λ“€μ΄λŠ” 멀버 ν•¨μˆ˜λ₯Ό λ§Œλ“€λ €λ©΄ 멀버 ν•¨μˆ˜ ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•œλ‹€. 2. μΌλ°˜ν™”λœ 볡사 생성 μ—°μ‚°κ³Ό μΌλ°˜ν™”λœ λŒ€μž… 연산을 μœ„ν•΄ 멀버 ν…œν”Œλ¦Ώμ„ μ„ μ–Έν–ˆλ‹€ ν•˜λ”λΌλ„, λ³΄ν†΅μ˜ 볡사 μƒμ„±μžμ™€ 볡사 λŒ€μž… μ—°μ‚°μžλŠ” μ—¬μ „νžˆ 직접 μ„ μ–Έν•΄μ•Ό ν•œλ‹€. ν¬μΈν„°λŠ” λ‹€μŒκ³Ό 같은 μ•”μ‹œμ  λ³€ν™˜μ„ μ§€μ›ν•œλ‹€. class Base {}; class Derived: public Base {}; Base *pt1 = new Derived; ν•˜μ§€λ§Œ ν…œν”Œλ¦Ώμ„ μ΄μš©ν•΄μ„œ λ§Œλ“œ..

Tutorials/C++ : Advanced 2022. 10. 25. 16:32