Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ программирования Π½Π° Π‘++. 101 ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈ рСкомСндация». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 42

Автор Π“Π΅Ρ€Π± Π‘Π°Ρ‚Ρ‚Π΅Ρ€

НаконСц, Ссли ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ оказываСтся слишком слоТно ΠΈΠ»ΠΈ излишнС Π΄ΠΎΡ€ΠΎΠ³ΠΎ, слСдуСт ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π±Π°Π·ΠΎΠ²ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ: функция Π»ΠΈΠ±ΠΎ выполняСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈ достигаСт Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ состояния, Π»ΠΈΠ±ΠΎ ΠΎΠ½Π° Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π° ΠΈ оставляСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² состоянии ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ (сохраняя ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ данная функция), Π½ΠΎ Π½Π΅ прСдсказуСмом (это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ исходноС состояниС, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌ; Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· постусловий ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹; ΠΎΠ΄Π½Π°ΠΊΠΎ всС ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ восстановлСны). Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ спроСктировано Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠΌΠ΅Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ΠΎΡ‚ ΠΈ всС; Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Π½Π΅ сущСствуСт. Ѐункция, которая Π½Π΅ Π΄Π°Π΅Ρ‚ Π΄Π°ΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ β€” это просто ошибка программиста. ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ для всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π”Π°ΠΆΠ΅ Ρ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ΄ΡƒΡ‚ Π½Π° ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ рСсурсов, Π² частности, Π² ситуациях, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Ρ‚Π°ΠΊ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ рСсурсы Π±ΡƒΠ΄ΡƒΡ‚ освобоТдСны ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой. ВсСгда Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ освобоТдались всС рСсурсы, Π° Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² согласованном состоянии Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ошибок, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ошибка Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡƒ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΡ€ΠΈ принятии Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ слСдуСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π½Π°Π΄ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ пСрспСктивС развития ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ВсСгда ΠΏΡ€ΠΎΡ‰Π΅ ΡƒΡΠΈΠ»ΠΈΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ сниТСниС стСпСни Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Π²Π΅Π΄Π΅Ρ‚ ΠΊ нСобходимости ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΊΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Π½Π° прСдоставлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π±ΠΎΠ»Π΅Π΅ строгой Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ.

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ "Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ошибок" ΠΈ "ΠΏΠ»ΠΎΡ…ΠΎΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅" ΠΈΠ΄ΡƒΡ‚ Ρ€ΡƒΠΊΠ° ΠΎΠ± Ρ€ΡƒΠΊΡƒ: Ссли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° слоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ, Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда это Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. НапримСр, Ссли функция ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… нСсвязанных Π·Π°Π΄Π°Ρ‡, Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ бСзопасной Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ошибок (см. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 5).

ΠžΡΡ‚Π΅Ρ€Π΅Π³Π°ΠΉΡ‚Π΅ΡΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ присваивания, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ трСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Π½Π΅ выполняСтся Π»ΠΈ присваиваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° самому сСбС. БСзопасный Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ошибок ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ присваивания автоматичСски бСзопасСн ΠΈ Π² ΠΏΠ»Π°Π½Π΅ присваивания самому сСбС. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ присваивания самому сСбС ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² качСствС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ излишнСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ (см. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 55).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° послС сбоя. Если ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для сохранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ» ΠΈ Π²ΠΎ врСмя записи ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» сбой, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° опСрация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½Π°. Π’ частности, Π½Π΅ освобоТдайтС Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ Π½Π° диск. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” Π½Π°ΠΌ извСстСн ΠΎΠ΄ΠΈΠ½ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π° для сохранСния Π΄Π°Π½Π½Ρ‹Ρ… послС ошибки записи.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. Π’Скстуры. Если Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ внСшний Π²ΠΈΠ΄, загруТая Π½ΠΎΠ²Ρ‹Π΅ тСкстуры, Ρ‚ΠΎ ΡƒΡ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ слСдуСт ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒ старыС тСкстуры Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΡ€ΠΈ сбоС Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½ΠΎΠ²Ρ‹Ρ… тСкстур вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΌ состоянии.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3. std::vector::insert. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС vector<T> ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ памяти, вставка элСмСнта Π² срСдину Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ пСрСмСщСния ряда ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ для освобоТдСния мСста для вставляСмого элСмСнта. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ выполняСтся с использованиСм ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ конструктора T::T(const T&) ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания T::operator=, ΠΈ Ссли ΠΎΠ΄Π½Π° ΠΈΠ· этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΎΠΈΡ‚ΡŒ (Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅), Ρ‚ΠΎ СдинствСнный способ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ β€” это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ копию ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π°Π΄ ΠΊΠΎΠΏΠΈΠ΅ΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» ΠΈ копию с использованиСм бСссбойной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ vector<T>::swap.

Однако Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСх ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… дСйствий обходится излишнС Π΄ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π² ΠΏΠ»Π°Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ памяти, Ρ‚Π°ΠΊ ΠΈ процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, обСспСчСниС строгой Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Π΄Π°ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π½Π΅ являСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ, оказываСтся Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°ΡΡ‚ΠΎΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈ нСобходимости ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ β€” для этого шаблон vector прСдоставляСт всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ инструмСнты. (Π’ Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС, Ссли Ρ‚ΠΈΠΏ содСрТимого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ конструкторС ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ присваивания, Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий Π½Π΅ трСбуСтся. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ копию Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ вставку Π² копию ΠΈ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ копию ΠΈ исходный Π²Π΅ΠΊΡ‚ΠΎΡ€.)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4. Запуск спутника. Рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся запуск спутника, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Сю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ LaunchSatellite, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ Π½Π΅ Π½ΠΈΠΆΠ΅ строгой. Если функция f ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всю Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ сбой, Π΄ΠΎ запуска спутника, Ρ‚ΠΎ f способна ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ. Но Ссли f Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π² процСссС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ сбой, ΡƒΠΆΠ΅ послС запуска спутника, Ρ‚ΠΎ обСспСчСниС строгой Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ оказываСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ β€” Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ спутник Π½Π° ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΡƒ ΡƒΠΆΠ΅ нСльзя. (Π’Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f слСдуСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π° Π΄Π²Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ΄Π½Π° функция Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π°ΠΆΠ΅ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… дСйствий Ρ‚Π°ΠΊΠΎΠΉ ваТности; см. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 5.)

Бсылки

[Abrahams96] β€’ [Abrahams01b] β€’ [Alexandrescu03d] β€’ [Josuttis99] Β§5.11.2 β€’ [Stroustrup00] Β§14.4.3, Β§E.2-4, Β§E.6 β€’ [Sutter00] Β§8-19, Β§40-41, Β§47 β€’ [Sutter02] Β§17-23 β€’ [Sutter04] Β§11-13 β€’ [Sutter04b]

72. Для увСдомлСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

РСзюмС

Для увСдомлСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π° Π½Π΅ ΠΊΠΎΠ΄Ρ‹ ошибок. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄Ρ‹ состояния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ΄Ρ‹ ошибок, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ errno) слСдуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (см. Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ 62), Π° Ρ‚Π°ΠΊΠΆΠ΅ для ситуаций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ошибками. К Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ экстрСнноС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΈΠ»ΠΈ ΠΏΠ»Π°Π½ΠΎΠ²ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ с освобоТдСниСм рСсурсов ΠΈ Ρ‚.ΠΏ. дСйствиями), слСдуСт ΠΏΡ€ΠΈΠ±Π΅Π³Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ситуациях, ΠΊΠΎΠ³Π΄Π° восстановлСниС послС ошибки Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (ΠΈΠ»ΠΈ Π½Π΅ трСбуСтся).

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π’ΠΎ, Ρ‡Ρ‚ΠΎ соврСмСнныС языки программирования, созданныС Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ послСдних 20 Π»Π΅Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² качСствС основного ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, β€” Π½Π΅ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для увСдомлСния ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ процСссС β€” извСстных Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ "ошибки", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ 70 ΠΊΠ°ΠΊ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ прСдусловий, постусловий ΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ увСдомлСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "ΠΊΠΎΠ΄Ρ‹ состояния" для всСх Π²ΠΈΠ΄ΠΎΠ² сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… посрСдством ΠΊΠΎΠ΄ΠΎΠ² (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠ΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°, errno, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetLastError ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ стратСгии Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ»ΠΈ получСния ΠΊΠΎΠ΄ΠΎΠ²), Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "ΠΊΠΎΠ΄Ρ‹ ошибок" β€” для Ρ‚Π΅Ρ… ΠΊΠΎΠ΄ΠΎΠ² состояния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ошибки. Π’ Π‘++ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… посрСдством ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ явныС прСимущСства ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ посрСдством ΠΊΠΎΠ΄ΠΎΠ² ошибок.

β€’ Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π‘Π°ΠΌΠΎΠ΅ слабоС мСсто ΠΊΠΎΠ΄ΠΎΠ² ошибок Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ΠΈ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ; Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π΅Π»ΠΈΡ‚ΡŒ хотя Π±Ρ‹ минимальноС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°ΠΌ ошибок, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° Π½Π΅Π³ΠΎ. Π’Π΅ΡΡŒΠΌΠ° распространСнная срСди программистов ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° β€” случайно (ΠΈΠ»ΠΈ ΠΈΠ·-Π·Π° Π»Π΅Π½ΠΈ) Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ошибки. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ просто ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ; Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ (Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ сдСлаСтС это ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ СдинствСнной инструкции catch(...)) ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π° Π½Π΅Π³ΠΎ Π½Π΅ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

β€’ Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ автоматичСски. ΠšΠΎΠ΄Ρ‹ ошибок ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ области видимости Π½Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ; для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ ошибкС, программист Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСдаст ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ошибкС. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ автоматичСски Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ области видимости Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Ρ‹. ("Π­Ρ‚ΠΎ Π½Π΅ самоС Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ β€” ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ брандмауэр". β€” [Stroustrup94, Β§16.8])

β€’ Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ выносят ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок ΠΈ восстановлСниС послС Π½ΠΈΡ… ΠΈΠ· основного ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ΄Π° ошибки ΠΈ Π΅Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° пСрСмСТаСтся с основным ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ управлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π΅ΠΌ самым запутывая Π΅Π³ΠΎ. Π­Ρ‚ΠΎ затрудняСт ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ сопровоТдСниС ΠΊΠ°ΠΊ основного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок ΠΈ восстановлСниС послС Π½ΠΈΡ… Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ catch-Π±Π»ΠΎΠΊΠΈ, Ρ‚.Π΅. Π΄Π΅Π»Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок сущСствСнно Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ. Π’Π΅ΠΌ самым основной ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, оказываСтся Π±ΠΎΠ»Π΅Π΅ понятным ΠΈ Π»Π΅Π³Ρ‡Π΅ сопровоТдаСмым.