λͺ©λ‘2022/10 (117)
KoreanFoodie's Study

C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 51 : new λ° delete λ₯Ό μμ±ν λ λ°λΌμΌ ν κΈ°μ‘΄μ κ΄λ‘λ₯Ό μ μμ λμ ν΅μ¬ : 1. κ΄λ‘μ μΌλ‘, operator new ν¨μλ λ©λͺ¨λ¦¬ ν λΉμ λ°λ³΅ν΄μ μλνλ 무ν 루νλ₯Ό κ°μ ΈμΌ νκ³ , λ©λͺ¨λ¦¬ ν λΉ μꡬλ₯Ό λ§μ‘±μν¬ μ μμ λ new μ²λ¦¬μλ₯Ό νΈμΆν΄μΌ νλ©°, 0λ°μ΄νΈμ λν λμ± λ μμ΄μΌ νλ€. ν΄λμ€ μ μ© λ²μ μ μμ μ΄ ν λΉνκΈ°λ‘ μμ λ ν¬κΈ°λ³΄λ€ λ ν°(νλ¦°) λ©λͺ¨λ¦¬ λΈλ‘μ λν μꡬλ μ²λ¦¬ν΄μΌ νλ€. 2. operator delete ν¨μλ λ ν¬μΈν°κ° λ€μ΄μμ λ μ무 μΌλ νμ§ μμμΌ νλ€. ν΄λμ€ μ μ© λ²μ μ ..

μ΄λμ°λμ 'μ΄λμ°μ κ²μμν' μ± μ 보며 μ’μ λ΄μ©μ μ 리νκ³ μμ΅λλ€. λ μμΈν λ΄μ©μ΄ κΆκΈνμλ€λ©΄, μ± μ κ΅¬λ§€ν΄ μ§μ μ½μ΄λ³΄μκΈ°λ₯Ό μΆμ²λ립λλ€! κ·Ήμ’νκ³ μ°λ¦¬λ κΈ°λ³Έμ μΌλ‘ λ°μΉ΄λ₯΄νΈ μ’νκ³λ₯Ό λ§μ΄ μ΄μ©νλλ°, μ¬μ€ νμ μ ν λλ§λ€ x μ y μ λ³νλ₯Ό λ§€λ² κ³μ°νλ κ²μ λ§€μ° λ²κ±°λ‘μ΄ μΌμΌ μ μλ€. μ΄ κ²½μ°, μμ μΌλ‘λΆν°μ 거리 r κ³Ό θ μ λ μμλ‘ κ΅¬μ±λ κ·Ήμ’νκ³(Polar coordinate system) μ μ¬μ©ν μ μλ€. μΌλ°μ μΌλ‘ arctan ν¨μλ₯Ό μ΄μ©νλ©΄ 벑ν°μ κ°λλ₯Ό μ»μ΄λΌ μ μλλ°(tanθ = y/x μ΄λ―λ‘, θ = arctan(y/x) μ΄ λ¨), arctan ν¨μλ μΉμμ΄ -180λμμ 180λκΉμ§ λ°μ λμ§ μλλ€. λ°λΌμ μ΄λ₯Ό ν΄κ²°νκΈ° μν΄, x μ y κ°μ λ°λ‘ μ ..

C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 50 : new λ° delete λ₯Ό μΈμ λ°κΏμΌ μ’μ μ리λ₯Ό λ€μμ§λ₯Ό νμ ν΄ λμ ν΅μ¬ : κ°λ°μκ° μ€μ€λ‘ μ¬μ©μ μ μ new λ° delete λ₯Ό μμ±νλ λ°λ μ¬λ¬κ°μ§ μ΄μ κ° μλ€. μ¬κΈ°μλ μν μ±λ₯ ν₯μ, ν μ¬μ© μμ μλ¬ λλ²κΉ , ν μ¬μ© μ 보 μμ§ λ±μ λͺ©μ μ΄ ν¬ν¨λλ€. operator new μ operator delete λ₯Ό λ°κΎΈλ κ°μ₯ νν μΈ κ°μ§ μ΄μ λ₯Ό ν λ² λ³΄μ. μλͺ»λ ν μ¬μ©μ νμ§νκΈ° μν΄ : λ°μ΄ν° μ€λ²λ°(overrun) λ° μΈλλ°(underrun) μ νμ§νκΈ° μν΄ νμ§μ© λ°μ΄νΈλ₯Ό μΆκ°λ‘ ν λΉν μ μλ€..

C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 49 : new μ²λ¦¬μμ λμ μ리λ₯Ό μ λλ‘ μ΄ν΄νμ ν΅μ¬ : 1. set_new_handler ν¨μλ₯Ό μ°λ©΄ λ©λͺ¨λ¦¬ ν λΉ μμ²μ΄ λ§μ‘±λμ§ λͺ»νμ λ νΈμΆλλ ν¨μλ₯Ό μ§μ ν μ μλ€. 2. μμΈλΆκ°(nothrow) new λ μν₯λ ₯μ΄ μ νλμ΄ μλ€. λ©λͺ¨λ¦¬ ν λΉ μ체μλ§ μ μ©λκΈ° λλ¬Έμ΄λ€. μ΄νμ νΈμΆλλ μμ±μμμλ μΌλ§λ μ§ μμΈλ₯Ό λμ§ μ μλ€. λ©λͺ¨λ¦¬ ν λΉμ΄ μ λλ‘ λμ§ λͺ»νμ λ, operator new λ μμΈλ₯Ό λμ§κΈ° μ μ¬μ©μ μͺ½μμ μ§μ ν μ μλ μλ¬ μ²λ¦¬ ν¨μλ₯Ό μ°μ μ μΌλ‘ νΈμΆνλ€. μ΄ ν¨μλ₯Ό new μ²λ¦¬μ(new-ha..

C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 48 : ν νλ¦Ώ λ©ννλ‘κ·Έλλ°, νμ§ μκ² λκ°? ν΅μ¬ : 1. ν νλ¦Ώ λ©ννλ‘κ·Έλλ°μ κΈ°μ‘΄ μμ μ λ°νμμμ μ»΄νμΌ νμμΌλ‘ μ ννλ ν¨κ³Όλ₯Ό λΈλ€. λ°λΌμ TMP λ₯Ό μ°λ©΄ μ ν μλ¬ νμ§μ λμ λ°νμ ν¨μ¨μ μμ κ±°λ¨Έμ₯ μ μλ€. 2. TMP λ μ μ± μ νμ μ‘°ν©μ κΈ°λ°νμ¬ μ¬μ©μ μ μ μ½λλ₯Ό μμ±νλ λ° μΈ μ μκ³ , νΉμ νμ μ λν΄ λΆμ μ ν μ½λκ° λ§λ€μ΄μ§λ κ²μ λ§λ λ°λ μΈ μ μλ€. ν νλ¦Ώ λ©ννλ‘κ·Έλλ°(template metaprogramming: TMP) λ μ»΄νμΌ λμ€μ μ€νλλ ν νλ¦Ώ κΈ°λ°μ νλ‘κ·Έλ¨μ μμ±νλ μΌμ..

C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 47 : νμ μ λν μ λ³΄κ° νμνλ€λ©΄ νΉμ±μ 보 ν΄λμ€λ₯Ό μ¬μ©νμ ν΅μ¬ : 1. νΉμ±μ 보 ν΄λμ€λ μ»΄νμΌ λμ€μ μ¬μ©ν μ μλ νμ κ΄λ ¨ μ 보λ₯Ό λ§λ€μ΄λΈλ€. λν νΉμ±μ 보 ν΄λμ€λ ν νλ¦Ώ λ° ν νλ¦Ώ νΉμ λ²μ μ μ¬μ©νμ¬ κ΅¬ννλ€. 2. ν¨μ μ€λ²λ‘λ© κΈ°λ²κ³Ό κ²°ν©νμ¬ νΉμ±μ 보 ν΄λμ€λ₯Ό μ¬μ©νλ©΄, μ»΄νμΌ νμμ κ²°μ λλ νμ λ³ if...else μ κ²λ¬Έμ ꡬμ¬ν μ μλ€. STL μλ container, iterator, algorithm λ§κ³ λ utility λΌκ³ λΆλ¦¬λ ν νλ¦Ώλ λͺ κ° λ€μ΄ μλ€. μ΄λ€ μ€ advance λΌλ, μ§μ λ ..

C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 46 : νμ λ³νμ΄ λ°λμ§ν κ²½μ°μλ λΉλ©€λ² ν¨μλ₯Ό ν΄λμ€ ν νλ¦Ώ μμ μ μν΄ λμ ν΅μ¬ : λͺ¨λ λ§€κ°λ³μμ λν΄ μμμ νμ λ³νμ μ§μνλ ν νλ¦Ώκ³Ό κ΄κ³κ° μλ ν¨μλ₯Ό μ 곡νλ ν΄λμ€ ν νλ¦Ώμ λ§λ€λ €κ³ νλ€λ©΄, μ΄λ° ν¨μλ ν΄λμ€ ν νλ¦Ώ μμ νλ λ ν¨μλ‘μ μ μνλ€ λ€μκ³Ό κ°μ μ 리μ κ³μ° ν΄λμ€κ° μλ€κ³ ν΄ λ³΄μ. template class Rational { public: Rational(const T& numerator = 0, const T& denominator = 1); const T numerator() const;..

C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 45 : "νΈνλλ λͺ¨λ νμ "μ λ°μλ€μ΄λ λ°λ λ©€λ² ν¨μ ν νλ¦Ώμ΄ μ§λ°©! ν΅μ¬ : 1. νΈνλλ λͺ¨λ νμ μ λ°μλ€μ΄λ λ©€λ² ν¨μλ₯Ό λ§λ€λ €λ©΄ λ©€λ² ν¨μ ν νλ¦Ώμ μ¬μ©νλ€. 2. μΌλ°νλ λ³΅μ¬ μμ± μ°μ°κ³Ό μΌλ°νλ λμ μ°μ°μ μν΄ λ©€λ² ν νλ¦Ώμ μ μΈνλ€ νλλΌλ, 보ν΅μ λ³΅μ¬ μμ±μμ λ³΅μ¬ λμ μ°μ°μλ μ¬μ ν μ§μ μ μΈν΄μΌ νλ€. ν¬μΈν°λ λ€μκ³Ό κ°μ μμμ λ³νμ μ§μνλ€. class Base {}; class Derived: public Base {}; Base *pt1 = new Derived; νμ§λ§ ν νλ¦Ώμ μ΄μ©ν΄μ λ§λ..

C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 44 : λ§€κ°λ³μμ λ 립μ μΈ μ½λλ ν νλ¦ΏμΌλ‘λΆν° λΆλ¦¬μν€μ ν΅μ¬ : 1. ν νλ¦Ώμ μ¬μ©νλ©΄ λΉμ·λΉμ·ν ν΄λμ€μ ν¨μκ° μ¬λ¬ λ² λ§λ€μ΄μ§λ€. λ°λΌμ ν νλ¦Ώ λ§€κ°λ³μμ μ’ μλμ§ μμ ν νλ¦Ώ μ½λλ λΉλνμ μμΈμ΄ λλ€. 2. λΉνμ ν νλ¦Ώ λ§€κ°λ³μλ‘ μκΈ°λ μ½λ λΉλνμ κ²½μ°, ν νλ¦Ώ λ§€κ°λ³μλ₯Ό ν¨μ λ§€κ°λ³μ νΉμ ν΄λμ€ λ°μ΄ν° λ©€λ²λ‘ λ체ν¨μΌλ‘μ¨ λΉλν μ’ μ’ μμ¨ μ μλ€. 3. νμ λ§€κ°λ³μλ‘ μκΈ°λ μ½λ λΉλνμ κ²½μ°, λμΌν μ΄μ§ ννꡬ쑰λ₯Ό κ°μ§κ³ μΈμ€ν΄μ€νλλ νμ λ€μ΄ ν κ°μ§ ν¨μ ꡬνμ 곡μ νκ² λ§λ¦μΌλ‘μ¨ λΉλνλ₯Ό κ°μμν¬ ..

C++ νλ‘κ·Έλλ¨Έμ νλ μμ΄μ λ°μ΄λΈμΈ, μ€μ½§ λ§μ΄μ΄μ€μ Modern Effective C++ λ₯Ό μ½κ³ κΈ°μ΅ν λ΄μ©μ μμ½νκ³ μμ΅λλ€. κΌ μ½μ΄λ³΄μκΈΈ μΆμ²λ립λλ€! νλͺ© 43 : ν νλ¦ΏμΌλ‘ λ§λ€μ΄μ§ κΈ°λ³Έ ν΄λμ€ μμ μ΄λ¦μ μ κ·Όνλ λ°©λ²μ μμ λμ ν΅μ¬ : νμ ν΄λμ€ ν νλ¦Ώμμ κΈ°λ³Έ ν΄λμ€ ν νλ¦Ώμ μ΄λ¦μ μ°Έμ‘°ν λλ, "this->" λ₯Ό μ λμ¬λ‘ λΆμ΄κ±°λ κΈ°λ³Έ ν΄λμ€ νμ λ¬Έμ λͺ μμ μΌλ‘ μ¨ μ£Όλ κ²μΌλ‘ ν΄κ²°νμ ν νλ¦Ώ ν΄λμ€ μμνλ λ€μ μμ μ½λλ₯Ό 보μ. class CompanyA { public: void sendCleartext(const std::string& msg); void sendEncrypted(const std::string& msg); }; // CompanyB, Compan..