Notice
Recent Posts
Recent Comments
Link
관리 메뉴

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

KoreanFoodie's Study

Effective Modern C++ | ν•­λͺ© 20 : std::shared_ptr 처럼 μž‘λ™ν•˜λ˜ λŒ€μƒμ„ μžƒμ„ μˆ˜λ„ μžˆλŠ” 포인터가 ν•„μš”ν•˜λ©΄ std::weak_ptr λ₯Ό μ‚¬μš©ν•˜λΌ

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 20 : std::shared_ptr 처럼 μž‘λ™ν•˜λ˜ λŒ€μƒμ„ μžƒμ„ μˆ˜λ„ μžˆλŠ” 포인터가 ν•„μš”ν•˜λ©΄ std::weak_ptr λ₯Ό μ‚¬μš©ν•˜λΌ 핡심 : 1. std::shared_ptr 처럼 μž‘λ™ν•˜λ˜ λŒ€μƒμ„ μžƒμ„ μˆ˜λ„ μžˆλŠ” 포인터가 ν•„μš”ν•˜λ©΄ std::weak_ptr λ₯Ό μ‚¬μš©ν•˜λΌ 2. std::weak_ptr 의 잠재적인 μš©λ„λ‘œλŠ” 캐싱, κ΄€μ°°μž λͺ©λ‘, 그리고 std::shared_ptr μˆœν™˜ 고리 방지가 μžˆλ‹€. std::weak_ptr λŠ” std::shared_ptr 처럼 λ™μž‘ν•˜λ˜, 객체의 μ°Έμ‘° νšŸμˆ˜μ—λŠ” 영ν–₯을 λΌμΉ˜μ§€ μ•ŠλŠ”λ‹€. λŒ€μƒμ„ μžƒμ€ std::..

Tutorials/C++ : Advanced 2022. 10. 26. 09:56
Effective Modern C++ | ν•­λͺ© 19 : μ†Œμœ κΆŒ 곡유 μžμ›μ˜ κ΄€λ¦¬μ—λŠ” std::shared_ptr λ₯Ό μ‚¬μš©ν•˜λΌ

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 19 : μ†Œμœ κΆŒ 곡유 μžμ›μ˜ κ΄€λ¦¬μ—λŠ” std::shared_ptr λ₯Ό μ‚¬μš©ν•˜λΌ 핡심 : 1. std::shared_ptr λŠ” μž„μ˜μ˜ 곡유 μžμ›μ˜ 수λͺ…을 νŽΈλ¦¬ν•˜κ²Œ(μ“°λ ˆκΈ° μˆ˜κ±°μ— 맑길 λ•Œλ§ŒνΌμ΄λ‚˜) 관리할 수 μžˆλŠ” μˆ˜λ‹¨μ„ μ œκ³΅ν•œλ‹€. 2. λŒ€μ²΄λ‘œ std::shared_ptr κ°μ²΄λŠ” κ·Έ 크기가 std::shared_ptr 객체의 두 배이며, μ œμ–΄ 블둝에 κ΄€λ ¨λœ μΆ”κ°€ 뢀담을 μœ λ°œν•˜λ©°, μ›μžμ  μ°Έμ‘° 횟수 μ‘°μž‘μ„ μš”κ΅¬ν•œλ‹€. 3. μžμ›μ€ 기본적으둜 delete λ₯Ό 톡해 νŒŒκ΄΄λ˜λ‚˜, μ»€μŠ€ν…€ μ‚­μ œμžλ„ μ§€μ›λœλ‹€. μ‚­μ œμžμ˜ ν˜•μ‹μ€ std::shared_ptr ..

Tutorials/C++ : Advanced 2022. 10. 26. 09:56
Effective Modern C++ | ν•­λͺ© 18 : μ†Œμœ κΆŒ 독점 μžμ›μ˜ κ΄€λ¦¬μ—λŠ” std::unique_ptr λ₯Ό μ‚¬μš©ν•˜λΌ

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 18 : μ†Œμœ κΆŒ 독점 μžμ›μ˜ κ΄€λ¦¬μ—λŠ” std::unique_ptr λ₯Ό μ‚¬μš©ν•˜λΌ 핡심 : 1. std::unique_ptr λŠ” 독점 μ†Œμœ κΆŒ μ˜λ―Έλ‘ μ„ 가진 μžμ›μ˜ 관리λ₯Ό μœ„ν•œ, μž‘κ³  λΉ λ₯Έ 이동 μ „μš© λ˜‘λ˜‘ν•œ 포인터이닀. 2. 기본적으둜 μžμ› νŒŒκ΄΄λŠ” delete λ₯Ό 톡해 μΌμ–΄λ‚˜λ‚˜, μ»€μŠ€ν…€ μ‚­μ œμžλ₯Ό 지정할 수 μžˆλ‹€. μƒνƒœ μžˆλŠ” μ‚­μ œμžλ‚˜ ν•¨μˆ˜ 포인터λ₯Ό μ‚¬μš©ν•˜λ©΄ std::unique_ptr 객체의 크기가 컀진닀. 3. std::unique_ptr λ₯Ό std::shared_ptr 둜 μ†μ‰½κ²Œ λ³€ν™˜ν•  수 μžˆλ‹€. C++ μ—μ„œ 생 포인터(raw pointe..

Tutorials/C++ : Advanced 2022. 10. 26. 09:56
Effective Modern C++ | ν•­λͺ© 17 : 특수 멀버 ν•¨μˆ˜λ“€μ˜ μžλ™ μž‘μ„± 쑰건을 μˆ™μ§€ν•˜λΌ

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 17 : 특수 멀버 ν•¨μˆ˜λ“€μ˜ μžλ™ μž‘μ„± 쑰건을 μˆ™μ§€ν•˜λΌ 핡심 : 1. μ»΄νŒŒμΌλŸ¬κ°€ 슀슀둜 μž‘μ„±ν•  수 μžˆλŠ” 멀버 ν•¨μˆ˜λ“€, 즉 κΈ°λ³Έ μƒμ„±μžμ™€ μ†Œλ©Έμž, 볡사 μ—°μ‚°λ“€, 이동 연산듀을 κ°€λ¦¬μΌœ 특수 멀버 ν•¨μˆ˜λΌκ³  ν•œλ‹€. 2. 이동 연산듀은 이동 μ—°μ‚°λ“€μ΄λ‚˜ 볡사 μ—°μ‚°λ“€, μ†Œλ©Έμžκ°€ λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έλ˜μ–΄ μžˆμ§€ μ•Šμ€ ν΄λž˜μŠ€μ— λŒ€ν•΄μ„œλ§Œ μžλ™μœΌλ‘œ μž‘μ„±λœλ‹€. 3. 볡사 μƒμ„±μžλŠ” 볡사 μƒμ„±μžκ°€ λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έλ˜μ–΄ μžˆμ§€ μ•Šμ€ ν΄λž˜μŠ€μ— λŒ€ν•΄μ„œλ§Œ μžλ™μœΌλ‘œ μž‘μ„±λ˜λ©°, 만일 이동 연산이 ν•˜λ‚˜λΌλ„ μ„ μ–Έλ˜μ–΄ 있으면 μ‚­μ œλœλ‹€. 볡사 λ°°μ • μ—°μ‚°μžλŠ” 볡사 λ°°μ • μ—°μ‚°μžκ°€ λͺ…μ‹œμ μœΌλ‘œ ..

Tutorials/C++ : Advanced 2022. 10. 26. 09:55
Effective Modern C++ | ν•­λͺ© 16 : const 멀버 ν•¨μˆ˜λ₯Ό μŠ€λ ˆλ“œμ— μ•ˆμ „ν•˜κ²Œ μž‘μ„±ν•˜λΌ

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 16 : const 멀버 ν•¨μˆ˜λ₯Ό μŠ€λ ˆλ“œμ— μ•ˆμ „ν•˜κ²Œ μž‘μ„±ν•˜λΌ 핡심 : 1. λ™μ‹œμ  λ¬Έλ§₯μ—μ„œ 쓰이지 μ•Šμ„ 것이 ν™•μ‹€ν•œ κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄, const 멀버 ν•¨μˆ˜λŠ” μŠ€λ ˆλ“œμ— μ•ˆμ „ν•˜κ²Œ μž‘μ„±ν•˜λΌ. 2. std::atomic λ³€μˆ˜λŠ” mutex 에 λΉ„ν•΄ μ„±λŠ₯μƒμ˜ 이점이 μžˆμ§€λ§Œ, ν•˜λ‚˜μ˜ λ³€μˆ˜ λ˜λŠ” λ©”λͺ¨λ¦¬ μž₯μ†Œλ₯Ό λ‹€λ£° λ•Œμ—λ§Œ μ ν•©ν•˜λ‹€. λ‹€μŒκ³Ό 같은 닀항식 ν΄λž˜μŠ€κ°€ μžˆλ‹€κ³  ν•˜μž. class Polynomial { public: using RootsType = std::vector; RootsType roots() const { // μΊμ‹œκ°€ μœ νš¨ν•˜μ§€ μ•ŠμœΌλ©΄ ..

Tutorials/C++ : Advanced 2022. 10. 26. 09:54
Effective Modern C++ | ν•­λͺ© 15 : κ°€λŠ₯ν•˜λ©΄ 항상 constexpr λ₯Ό μ‚¬μš©ν•˜λΌ

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 15 : κ°€λŠ₯ν•˜λ©΄ 항상 constexpr λ₯Ό μ‚¬μš©ν•˜λΌ 핡심 : 1. constexpr κ°μ²΄λŠ” const 이며, 컴파일 도쀑에 μ•Œλ €μ§€λŠ” κ°’λ“€λ‘œ μ΄ˆκΈ°ν™”λœλ‹€. 2. constexpr ν•¨μˆ˜λŠ” κ·Έ 값이 컴파일 도쀑에 μ•Œλ €μ§€λŠ” μΈμˆ˜λ“€λ‘œ ν˜ΈμΆœν•˜λŠ” κ²½μš°μ—λŠ” 컴파일 μ‹œμ  κ²°κ³Όλ₯Ό μ‚°μΆœν•œλ‹€. 3. constexpr κ°μ²΄λ‚˜ ν•¨μˆ˜λŠ” λΉ„constexpr κ°μ²΄λ‚˜ ν•¨μˆ˜λ³΄λ‹€ κ΄‘λ²”μœ„ν•œ λ¬Έλ§₯μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. 4. constexpr 은 κ°μ²΄λ‚˜ ν•¨μˆ˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ˜ 일뢀이닀. κ°œλ…μ μœΌλ‘œ, constexpr λŠ” μ–΄λ– ν•œ 값이 단지 μƒμˆ˜μΌ 뿐만 μ•„λ‹ˆλΌ 컴파일 μ‹œμ μ—μ„œ μ•Œλ €μ§„..

Tutorials/C++ : Advanced 2022. 10. 26. 09:54
Effective Modern C++ | ν•­λͺ© 14 : μ˜ˆμ™Έλ₯Ό λ°©μΆœν•˜μ§€ μ•Šμ„ ν•¨μˆ˜λŠ” noexcept 둜 μ„ μ–Έν•˜λΌ

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 14 : μ˜ˆμ™Έλ₯Ό λ°©μΆœν•˜μ§€ μ•Šμ„ ν•¨μˆ˜λŠ” noexcept 둜 μ„ μ–Έν•˜λΌ 핡심 : 1. noexcept λŠ” ν•¨μˆ˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ˜ 일뢀이닀. μ΄λŠ” ν˜ΈμΆœμžκ°€ noexcept 여뢀에 μ˜μ‘΄ν•  수 μžˆμŒμ„ λœ»ν•œλ‹€. 2. noexcept ν•¨μˆ˜λŠ” λΉ„ noexcept ν•¨μˆ˜λ³΄λ‹€ μ΅œμ ν™”μ˜ 여지가 크닀. 3. noexcept λŠ” 이동 μ—°μ‚°λ“€κ³Ό swap, λ©”λͺ¨λ¦¬ ν•΄μ œ ν•¨μˆ˜λ“€, 그리고 μ†Œλ©Έμžλ“€μ— νŠΉνžˆλ‚˜ μœ μš©ν•˜λ‹€. 4. λŒ€λΆ€λΆ„μ˜ ν•¨μˆ˜λŠ” noexcept κ°€ μ•„λ‹ˆλΌ μ˜ˆμ™Έμ— 쀑립적이닀. ν•¨μˆ˜λ₯Ό noexcept 둜 μ„ μ–Έν•  κ²ƒμΈμ§€μ˜ μ—¬λΆ€λŠ” μΈν„°νŽ˜μ΄μŠ€ μ„€κ³„μƒμ˜ 문제인데, μ΄λŠ” 클라..

Tutorials/C++ : Advanced 2022. 10. 26. 09:54
Effective Modern C++ | ν•­λͺ© 12 : μž¬μ •μ˜ ν•¨μˆ˜λ“€μ„ override 둜 μ„ μ–Έν•˜λΌ

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 12 : μž¬μ •μ˜ ν•¨μˆ˜λ“€μ„ override 둜 μ„ μ–Έν•˜λΌ 핡심 : 1. μž¬μ •μ˜ ν•¨μˆ˜λŠ” override 둜 μ„ μ–Έν•˜λΌ. 2. 멀버 ν•¨μˆ˜ μ°Έμ‘° ν•œμ •μ‚¬(reference qualifier)λ₯Ό μ΄μš©ν•˜λ©΄ 멀버 ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” 객체(*this)의 μ™Όκ°’ 버전과 였λ₯Έκ°’ 버전을 λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆλ‹€. 기반 ν΄λž˜μŠ€μ—μ„œ μ •μ˜λœ 가상 ν•¨μˆ˜κ°€ νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜λ˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같은 쑰건듀이 만쑱 λ˜μ–΄μ•Ό ν•œλ‹€. 기반 클래슀 ν•¨μˆ˜κ°€ κ°€μƒν•¨μˆ˜ 이어야 함 기반 ν•¨μˆ˜μ™€ νŒŒμƒ ν•¨μˆ˜μ˜ 이름이 동일해야 함(μ†Œλ©Έμž μ œμ™Έ) 기반 ν•¨μˆ˜μ™€ νŒŒμƒ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜ ν˜•μ‹λ“€..

Tutorials/C++ : Advanced 2022. 10. 26. 09:53
Effective Modern C++ | ν•­λͺ© 11 : μ •μ˜λ˜μ§€ μ•Šμ€ λΉ„κ³΅κ°œ ν•¨μˆ˜λ³΄λ‹€ μ‚­μ œλœ ν•¨μˆ˜λ₯Ό μ„ ν˜Έν•˜λΌ

C++ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ ν•„λ…μ„œμ΄μž 바이블인, 슀콧 λ§ˆμ΄μ–΄μŠ€μ˜ Modern Effective C++ λ₯Ό 읽고 κΈ°μ–΅ν•  λ‚΄μš©μ„ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κΌ­ μ½μ–΄λ³΄μ‹œκΈΈ μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€! ν•­λͺ© 11 : μ •μ˜λ˜μ§€ μ•Šμ€ λΉ„κ³΅κ°œ ν•¨μˆ˜λ³΄λ‹€ μ‚­μ œλœ ν•¨μˆ˜λ₯Ό μ„ ν˜Έν•˜λΌ 핡심 : 1. μ •μ˜λ˜μ§€ μ•Šμ€ λΉ„κ³΅κ°œ ν•¨μˆ˜λ³΄λ‹€ μ‚­μ œλœ ν•¨μˆ˜λ₯Ό μ„ ν˜Έν•˜λΌ. 2. 비멀버 ν•¨μˆ˜μ™€ ν…œν”Œλ¦Ώ μΈμŠ€ν„΄μŠ€λ₯Ό λΉ„λ‘―ν•œ κ·Έ μ–΄λ–€ ν•¨μˆ˜λ„ μ‚­μ œν•  수 μžˆλ‹€. λ‹€λ₯Έ κ°œλ°œμžμ—κ²Œ μ œκ³΅ν•  μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ, κ·Έ κ°œλ°œμžκ°€ μ½”λ“œμ˜ νŠΉμ • ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜λŠ” κ°€μž₯ ν”ν•œ 방법은 κ·Έλƒ₯ κ·Έ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜μ§€ μ•ŠλŠ” 것이닀. ν•˜μ§€λ§Œ μ»΄νŒŒμΌλŸ¬κ°€ λ•Œλ‘œλŠ” ν•¨μˆ˜λ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€. C++ 98 μ—μ„œλŠ” private 으둜 μ„ μ–Έ ν›„, μ •μ˜λ₯Ό ν•˜μ§€ μ•ŠλŠ” λ°©μ‹μœΌλ‘œ 이λ₯Ό λ°©μ§€ν•˜κΈ°λ„ ν•œλ‹€. μ‹€μ œλ‘œ μž…λ ₯..

Tutorials/C++ : Advanced 2022. 10. 26. 09:53