рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдореЗрдВ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╛рдЗрд▓ рдЕрдкрдбреЗрдЯ

рд╕реА ++ рдХреЛрд░ рдЧрд╛рдЗрдбрд▓рд╛рдЗрдиреНрд╕ рдХреА рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╛рдЗрд▓, рдЬреЛ рд╕реА ++ рдХреЛрд░ рдЧрд╛рдЗрдбрд▓рд╛рдЗрдиреНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реА ++ рдХреЛрдб рдореЗрдВ рд▓рд╛рдЗрдлрд▓рд╛рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдПрдВрдб рд░реЗрдлрд░реЗрдВрд╕ рдХреЛ рд▓рдЯрдХрд╛рдирд╛ред рдпрд╣ рдиреНрдпреВрдирддрдо рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рджреЛрд╖реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреБрдЫ рд╕рд░рд▓ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдореЗрдВ рдореМрдЬреВрдж рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред





рдмреНрд▓реЙрдЧ рдореЗрдВ рдореВрд▓

рдпреЗ рдореВрд▓ рдЕрдиреБрдмрдВрдз рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ:


  1. рд╕рдВрднрд╛рд╡рд┐рдд рд▓рдЯрдХрди рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред
  2. рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд▓рдЯрдХрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реВрдЪрдХ рдХреЛ рдкрд╛рд╕ рди рдХрд░реЗрдВред
  3. рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЭреВрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕реВрдЪрдХ рдХреЛ рд╡рд╛рдкрд╕ рди рдХрд░реЗрдВред

рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЬрди 1.0 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рд░реНрдм рд╕рдЯрд░ рдХреЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЛ рджреЗрдЦреЗрдВ ред


рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ


рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдореЗрдВ, рд╣рдордиреЗ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкрд░реАрдХреНрд╖рдХ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд░рд┐рд▓реАрдЬрд╝ рднреЗрдЬ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЪреЗрдХрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ C ++ рдХреЛрд░ рдЪреЗрдХрд░реНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред


  • рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, string_ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░, рдФрд░ рд╕реНрдкреИрдиред
  • рдХрд╕реНрдЯрдо рдУрдирд░ рдФрд░ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдмреЗрд╣рддрд░ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЬреЛ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрдВрдЯреЗрдирд░, рдУрдирд┐рдВрдЧ-рдкреЙрдЗрдВрдЯрд░реНрд╕ рдпрд╛ рдЧреИрд░-рдУрдирд┐рдВрдЧ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
  • рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкреВрд░реНрд╡ рдФрд░ рдмрд╛рдж рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк-рдЬрд╛рдЧрд░реВрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рдпрдо рдЭреВрдареА-рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
  • рдХреБрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд░реНрдердиред
  • рд╕рд╛рдорд╛рдиреНрдп рд╢реБрджреНрдзрддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ред
  • рдХреБрдЫ рд╕рд░рд▓ nullptr рд╡рд┐рд╢реНрд▓реЗрд╖рдгред

рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкрд░реАрдХреНрд╖рдХ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛


рдЪреЗрдХрд░ рдирд┐рдпрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдирдП рдирд┐рдпрдореЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЪреБрдиреЗ рдЧрдП рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд┐рдпрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдпрд╛ рддреЛ "C ++ рдХреЛрд░ рдЪреЗрдХ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдирд┐рдпрдо" рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЬреЛ рдХреЗрд╡рд▓ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╛рдЗрд▓ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ - рдпрд╛ рдЖрдк 26489 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 26486 рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рдирд┐рдпрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧреБрдг рдкреГрд╖реНрда рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЬреЛ C ++ рдХреЛрд░ рдЪреЗрдХ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдирд┐рдпрдо рдирд┐рдпрдореЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧреБрдг рдкреГрд╖реНрда рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЬреЛ C ++ рдХреЛрд░ рдЪреЗрдХ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдирд┐рдпрдо рдирд┐рдпрдореЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред


рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдЬрдм рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд┐рд╢реНрд▓реЗрд╖рдг> рд░рди рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг), рдпрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдЪреЗрддрд╛рд╡рдиреА рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдЖрдЬреАрд╡рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╕рд╛рде рдЧреНрд░реАрди рд╕реНрдХреНрд╡рд┐рдЧрд▓реНрд╕ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреАред


рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╣рд░реЗ рд░рдВрдЧ рдХреА рдзрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЪреЗрдХрд░ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рддреЗ рд╣реБрдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯред

рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╣рд░реЗ рд░рдВрдЧ рдХреА рдзрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЪреЗрдХрд░ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рддреЗ рд╣реБрдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯред


рдЙрджрд╛рд╣рд░рдг


рдЦрддрд░рдирд╛рдХ рд╕рдВрдХреЗрдд


рд╕рд░рд▓рддрдо рдЙрджрд╛рд╣рд░рдг - рд▓рдЯрдХрддреЗ рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИред рдпрд╣рд╛рдБ px x рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ x px рдЭреВрд▓рдиреЗ рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рдЫреЛрдбрд╝рддрд╛ рд╣реИред рдЬрдм px рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЬрд╛рддреА рд╣реИред


 void simple_test() { int* px; { int x = 0; px = &x; } *px = 1; // error, dangling pointer to 'x' } 

рдЦрддрд░рдирд╛рдХ рдЖрдЙрдЯрдкреБрдЯ рд╕реВрдЪрдХ


рдЭреВрд▓рдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ ppx рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ x рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ *ppx рдЭреВрд▓рдиреЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред


 void out_parameter(int x, int** ppx) // *ppx points to 'x' which is invalid { *ppx = &x; } 

рдЭрдХрдЭреЛрд░ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдирдЬрд╛рд░рд╛


рдЕрдВрддрд┐рдо рджреЛ рдЙрджрд╛рд╣рд░рдг рд╕реНрдкрд╖реНрдЯ рдереЗ, рд▓реЗрдХрд┐рди рдЕрд╕реНрдерд╛рдпреА рдЙрджрд╛рд╣рд░рдг рд╕реВрдХреНрд╖реНрдо рдХреАрдбрд╝реЗ рдХреЛ рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рдмрдЧ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ?


 std::string get_string(); void dangling_string_view() { std::string_view sv = get_string(); auto c = sv.at(0); } 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡реНрдпреВ sv рдХреЛ get_string() рд╕реЗ get_string() рдЧрдП рдЕрд╕реНрдерд╛рдпреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд╕реНрдерд╛рдпреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рддрдм рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЕрдорд╛рдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реБрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреГрд╢реНрдп рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред


рдЭреВрд▓рддрд╛ рд╣реБрдЖ рднрдХреНрд╖рдХ


рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЕрдорд╛рдиреНрдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдЬреАрд╡рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдорд╛рдорд▓реЗ рдореЗрдВ, push_back рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЕрдкрдиреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рднрдВрдбрд╛рд░рдг рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ it рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИред


 void dangling_iterator() { std::vector<int> v = { 1, 2, 3 }; auto it = v.begin(); *it = 0; // ok, iterator is valid v.push_back(4); *it = 0; // error, using an invalid iterator } 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реА рдПрдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ 'std :: рд╡реЗрдХреНрдЯрд░ :: push_back' рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд┐рдпрдореЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдПрдХ 'рдорд╛рд▓рд┐рдХ' рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рдЬрдм рд╕реНрд╡рд╛рдореА рдкрд░ рдПрдХ рдЧреИрд░-рдХрд╛рд╕реНрдЯ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреЛ рдЕрдорд╛рдиреНрдп рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдорд╛рд▓рд┐рдХ рдХреА рд╕реНрдореГрддрд┐ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рднреА рдЕрдорд╛рдиреНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрд╡рд╛рдореА


рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЗрд╕рдХреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХрд╛ рдХреЛрдб рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЕрдЧрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, std::unique_ptr , рдПрдХ 'рд╕реНрд╡рд╛рдореА' рдкреНрд░рдХрд╛рд░, рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯреЗрдВрд╕ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдиреЙрди-рдХреЙрд╕реНрдЯ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдорд╛рд▓рд┐рдХреЛрдВ рдХреЛ рдХреИрд▓реА рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред


 void use_unique_ptr(std::unique_ptr<int>& upRef); void assumes_modification() { auto unique = std::make_unique<int>(0); // Line A auto ptr = unique.get(); *ptr = 10; // ok, ptr is valid use_unique_ptr(unique); *ptr = 10; // error, dangling pointer to the memory held by 'unique' at Line A } 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдХрдЪреНрдЪреЗ рд╕реВрдЪрдХ, ptr , unique рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реА рд╕реНрдореГрддрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рддрдм unique рдХреЛ рдЧреИрд░- use_unique_ptr рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ function_unique_ptr рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ unique рдХрд╛ рдПрдХ рдиреЙрди-рдХрд╛рд╕реНрдЯ рдЙрдкрдпреЛрдЧ рд╣реИ рдЬрд╣рд╛рдБ рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ unique 'рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрдорд╛рдиреНрдп рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ unique_ptr :: рд░реАрд╕реЗрдЯ) рдЬрд┐рд╕рд╕реЗ ptr рдЭреВрд▓рдиреЗ рд▓рдЧреЗред


рдФрд░ рдЙрджрд╛рд╣рд░рдг


рдХрдИ рдЕрдиреНрдп рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрдб рдкрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рд░реНрдм рдХреЗ рдмреНрд▓реЙрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░, рдпрджрд┐ рдЖрдк рдЙрддреНрд╕реБрдХ рд╣реИрдВ, рддреЛ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреЗрдкрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝реЗрдВред


рдЬреНрдЮрд╛рдд рдореБрджреНрджреЗ


рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рдЬреИрд╕рд╛ рдХрд┐ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреЗрдкрд░ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдпрд╣рд╛рдВ рд╡реЗ рд╡реНрдпрд╛рдкрдХ рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


  • рдПрдиреЛрдЯреЗрд╢рдВрд╕ - рдкреЗрдкрд░ рдПрдиреЛрдЯреЗрд╢рди (рдпрд╛рдиреА [[gsl::lifetime-const]] рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд┐рдпрдо рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдк рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рдЕрдкрд╡рд╛рдж - catch рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕рд╣рд┐рдд рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкрде, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
  • рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрд▓реНрд╕ рдлреЙрд░ рдПрд╕рдЯреАрдПрд▓ рдЯрд╛рдЗрдкреНрд╕ - lifetime-const рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдПрд╡рдЬ рдореЗрдВ, рдкреЗрдкрд░ рдпрд╣ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ рдХрд┐ рджреБрд░реНрд▓рдн рдПрд╕рдЯреАрдПрд▓ рдХрдВрдЯреЗрдирд░ рдореЗрдВрдмрд░ рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдБ рд╣рдо рдбрд┐рдлреЙрд▓реНрдЯреНрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдРрд╕реЗ рдЯреНрд░реАрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЙрдиреНрд╣реЗрдВ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, std::vector::at рдХрд╛ рдПрдХ рдЕрдзрд┐рднрд╛рд░ std::vector::at const рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдиреЙрди-рдХреЙрд╕реНрдЯ рд╕рдВрджрд░реНрдн рдХреЛ рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХреЙрд▓рд┐рдВрдЧ lifetime-const рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реЗрдХреНрдЯрд░ рдХреА рдореЗрдореЛрд░реА рдХреЛ рдЕрдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рд╕рднреА рдПрд╕рдЯреАрдПрд▓ рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЗрд╕ рдирд┐рд╣рд┐рдд рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
  • рд▓реИрдореНрдмреНрдбрд╛ рдХреИрдкреНрдЪрд░ - рдпрджрд┐ рд╕реНрдЯреИрдореНрдмрд▓ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд▓реИрдореНрдмреНрдбрд╛ рдореЗрдВ рд░реЗрдлрд░реЗрдВрд╕ рджреНрд╡рд╛рд░рд╛ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд▓реИрдореНрдмреНрдбрд╛ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рд╕реНрдХреЛрдк рдЫреЛрдбрд╝рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

     auto lambda_test() { int x; auto captures_x = [&x] { return x; }; return captures_x; // returns a dangling reference to 'x' } 

рд▓рдкреЗрдЯ рд▓реЛ


рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдореЗрдВ рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкрд░реАрдХреНрд╖рдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЬреАрд╡рди рднрд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдпрд╛ рдЧрд▓рдд рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЙрдиреНрд╣реЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рдо рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗ рд╕рдХреЗрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдЪреЗрдХ рдХреЗ рд╕рд╛рде рд╕реБрдЭрд╛рд╡ рдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ - рдпрд╛ рдХрд┐рд╕реА рднреА рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реБрд╡рд┐рдзрд╛ - рдпрд╛ рддреЛ рд╕рдорд╕реНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рд╕рдореБрджрд╛рдп рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ рд╣рдореЗрдВ рдмрддрд╛рдПрдВред рд╣рдо рдЯреНрд╡рд┐рдЯрд░ рдкрд░ @VisualC рдкрд░ рднреА рд╣реИрдВред

Source: https://habr.com/ru/post/hi437660/


All Articles