рд╢реБрджреНрдз рд╕реА ++: рдХреИрд╕реЗ рдареАрдХ рд╕реЗ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП


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

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдкрд┐рдЫрд▓реА рдмрд╛рд░ рджреЗрдЦрд╛ рдерд╛, рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдкрд╛рд╕ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рд╣реИ - рдПрдХ рд╡рд┐рдзреНрд╡рдВрд╕рдХ! рдЬрдм рдХрдХреНрд╖рд╛ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ рддреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдореЗрд╢рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛, рдмреАрдЪ рдореЗрдВ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХрдХреНрд╖рд╛ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рд╡реИрд╕реЗ рднреА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред (рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ ... рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝реЗрдВ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред) рд╕реА рдореЗрдВ, рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред
if(!Create1(...)) return -1; if(!Create2(...)) { Destroy1(...); return -1; } тАж if(!CreateN(...)) { Destroy1(...); Destroy2(...); ... DestroyN-1(...); return -1; } 

рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд╛рдЦрд╛рдПрдВ рдФрд░ рд▓реВрдк рдХреЗрд╡рд▓ рдХреЛрдб рдореЗрдВ рднреНрд░рдо рдФрд░ рдмреЛрдЭрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдЕрдВрддрд┐рдо рдЦрдВрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ! рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдП рдХрд┐ рдХреМрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛ рд╣реИ рдФрд░ рдХреМрди рдЕрдВрддрд┐рдо рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдиреЗрд╕реНрдЯреЗрдб рдмреНрд▓реЙрдХ рдФрд░ рдЕрдВрддрд┐рдордХрд░рдг рдХреЗ рдХрдИ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХреЛрдб рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рднреА рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
 #include <iostream> #include <stdexcept> class Foo { private: static int sm_count; int instance; public: Foo() { instance = ++sm_count; if(instance > 5) throw std::runtime_error("   5 ."); std::cout << " тДЦ " << instance << "  Foo .\n"; } ~Foo() { std::cout << " тДЦ " << instance << "  Foo .\n"; } }; int Foo::sm_count = 0; int main() { try { Foo* pFoo = new Foo[10]; } catch(const std::exception& e) { std::cout << e.what() << "\n"; } return 0; } 

рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХрд╛ рд╕рдХреНрд╖рдо рдФрд░ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдореЗрдВ C ++ рд▓рд╛рддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ, рдмрдЬрд╛рдп рд╕рдордорд┐рдд рдЖрд╡рдВрдЯрди рдФрд░ рдореБрдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХрд╛ рддрд╛рд▓рдореЗрд▓ рдмрд╣реБрдд рднреНрд░рд╛рдордХ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдвреЗрд░ рд╕реЗ рджреВрд░рд╕реНрде рд╡рд╕реНрддреБ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рдПрдХ рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдирд┐рдХрд╛рд╕ рдХреА рдЕрдкреАрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЖрдк рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕реА рднрд╛рд╖рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд "рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реА"), рддреЛ рдПрдХ рдмрд╛рд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдПрдХ рд╕реВрдЪрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИред рдпрд╣рд╛рдВ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ (рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдирдХреЗ рд╕рдорд╛рд╡реЗрд╢ рдХреЗ рдХреНрд░рдо рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ:
 // HeaderFile1 class Interface1 { public: virtual void SomeFunc(int a) = 0; }; class Interface2 { public: virtual void AnotherFunc(double b) = 0; }; // HeaderFile2 class Implementation; class Storage { private: Implementation* m_pImpl; public: Storage(Implementation* in_pImpl) : m_pImpl(in_pImpl) {} Interface1* GetInterface1() { return (Interface1*)m_pImpl; } Interface2* GetInterface2() { return (Interface2*)m_pImpl; } }; // HeaderFile3 #include <iostream> class ImplementationBase { protected: virtual void BaseFunc() { std::cout << "BaseFunc  .\n"; } }; class Implementation : private ImplementationBase , public Interface1 , public Interface2 { public: virtual void SomeFunc(int a) { std::cout << "SomeFunc     a = " << a << ".\n"; } virtual void AnotherFunc(double b) { std::cout << "AnotherFunc     b = " << b << ".\n"; } }; // C++ source file // #include <HeaderFile1> // #include <HeaderFile2> // #include <HeaderFile3> int main() { Implementation impl; Storage storage(&impl); storage.GetInterface1()->SomeFunc(42); storage.GetInterface2()->AnotherFunc(37.7); return 0; } 

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

рд╡рд╛рдкрд╕ рд╡рд┐рдзреНрд╡рдВрд╕рдХреЛрдВ рдХреЗ рд▓рд┐рдПред рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдирд╛ рдирд╣реАрдВ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдареАрдХ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯреИрдХ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕реНрдЯреИрдХ рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ: рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рддреБрд░рдВрдд рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдХрд░реАрдм рд╕реЗ рджреЗрдЦреЗрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдореГрддрд┐, рдЙрдирдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЖрд╡рдВрдЯрди рди рдХрд░реЗрдВ, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрд╡рд╛рдж рди рдлреЗрдВрдХреЗрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рднреА "рд╕рдорд╛рдкрди" рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рд╡реИрдпрд╛ рддрдп рдХрд░рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ Socket::Close() рдЕрдм throw std::runtime_error("Close socket error: socket was not opened") рд╕рдХрддреЗ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рдЪреАрдЬ рдЬрд┐рд╕реЗ "рд╕рдорд╛рдкрди" рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕реЗ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдореЗрдВ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рдЗрд╕ рдХреЙрд▓ рдХреЛ рд▓рдкреЗрдЯрдирд╛ рднреА рддрд░реНрдХрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдк рдПрдХ рдЯреАрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдВрдж рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдирд┐рдпрдо рд▓рд┐рдЦреЗрдВ: рдХрд┐рд╕реА рднреА "рд╕рдорд╛рдкрди" рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрдкрдХреЛ рдЪреБрдкрдЪрд╛рдк рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡рд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдЬреЛ рдкреВрдЫрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЙрд╕реЗ "рдмрдВрдж" рдХрд░рдирд╛, рднрд▓реЗ рд╣реА рдпрд╣ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реЛред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдореЗрдВ рдХреБрдЫ рднреА рдЖрд╡рдВрдЯрд┐рдд рдпрд╛ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА:
 ~object::object() { g_logger.put_message(std::string("Object ") + m_name + std::string(" was deleted.")); } 

рдпрджрд┐ рдпрд╣ рд╡рд┐рдзреНрд╡рдВрд╕рдХ "рдореЗрдореЛрд░реА рд╕реЗ рдмрд╛рд╣рд░" рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреНрд░реИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░рдг рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рднреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрджреЗрд╢ рдмрдирд╛рдиреЗ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреИрд╕реЗ рд╣реЛ? рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ "рд╕реБрдВрджрд░" рдПрдХ рдирд╣реАрдВ рд╣реИ, рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реИ, рдЬрдм рд╕рдмрдХреБрдЫ рдареАрдХ рдерд╛, рдФрд░ рдлрд┐рд▓рд╣рд╛рд▓ рдЗрд╕реЗ рдирд┐рдЬреА рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд░рдЦреЗрдВред рдПрдХ рдФрд░ "рдЙрдиреНрдирдд" рд╡рд┐рдХрд▓реНрдк:
 ~object::object() { g_logger << "Object " << m_name << " was deleted."; } 

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

рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЖрд╡рдВрдЯрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдирд╛ рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣рд╛рдБ рдЧрд▓рдд рдЙрджрд╛рд╣рд░рдг рд╣реИ:
 std::vector<int> items; ... items.push_back(item1); items.push_back(item2);   : std::vector<int> items; ... items.reserve(items.size() + 2); items.push_back(item1); items.push_back(item2); 

рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореЗрдореЛрд░реА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдРрд╕реЗ рдХреНрд╖рдг рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╕рд░рдгреА рдореЗрдВ рджреЛ рддрддреНрд╡ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ, рдпрд╛ рдХреЛрдИ рднреА рдирд╣реАрдВред рдХреЛрдИ "рдЕрд╡рд┐рдХрд╕рд┐рдд" рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдирд╛рд╢рдХрд╛рд░рд┐рдпреЛрдВ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рд╕реАрдзрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд╣ рд╣реИ рдЬреЛ рд╕реНрдореГрддрд┐ рдХреА рдХрдореА рдХреЗ рд╕рд╛рде рднреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдЪреБрдкрдЪрд╛рдк рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЦреИрд░, рд╢рд╛рдпрдж рдЪреБрдкрдЪрд╛рдк рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдирдореНрд░рддрд╛ рд╕реЗ рдЕрд▓рд╡рд┐рджрд╛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдЗрддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, std::list рдореЗрдВ рд░рд┐рдЬрд╝рд░реНрд╡ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдЖрдЗрдЯрдо рдХреА "рдЦрд╛рд▓реА" рд╕реНрдерд┐рддрд┐ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП null_ptr рдпрд╛ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП -1, рдФрд░ рдЗрд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рдбрд╛рд▓реЗрдВред рдФрд░ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдореЗрдВ, рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреБрдиреВрди рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдЬреЛ рд╕реНрдЯреИрдХ рдкрд░ рдЕрд╕реНрдерд╛рдпреА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯ, рдмрджрд▓реЗ рдореЗрдВ, рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмреАрдЪ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдЕрдзрд┐рдХрд╛рд░ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрд░реНрдз-рдЧрдгрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмреАрдЪ рдореЗрдВ ++ рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрдХрдбрд╝ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдУрд░ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛, рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдРрд╕реА рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдПрдВ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИрдВ, рдФрд░ рд╡рд┐рдирд╛рд╢рдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдирд╖реНрдЯ рдХрд░ рджреА рдЬрд╛рддреА рд╣реИрдВ, рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдЦреБрдж рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рддреА рд╣реИрдВред рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
 typedef std::pair<int, int> DataItem; std::vector<DataItem> items; ... items.push_back(DataItem(item1, item2)); 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╛рд░реНрдп рдХреЗ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЛ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реИред

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


All Articles