рд╢реВрдиреНрдп рдХрд╛ рдирд┐рдпрдо

C ++ 03 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, "рддреАрди рдХрд╛ рдирд┐рдпрдо" рд╣реИ, c ++ 11 рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ "5 рдХреЗ рдирд┐рдпрдо" рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдпрджреНрдпрдкрд┐ рдпреЗ рдирд┐рдпрдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИрдВ, рдлрд┐рд░ рднреА рд╡реЗ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред рд╢реВрдиреНрдп рдХрд╛ рдирд┐рдпрдо рдЗрди рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдКрдВрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╣рд▓реЗ 2 рдирд┐рдпрдо рдХреНрдпрд╛ рд╣реИрдВ, рдФрд░ "рд╢реВрдиреНрдп рдирд┐рдпрдо" рдХреЗ рдкреАрдЫреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдкреНрд░реЗрд░рдгрд╛


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

рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреА рд░рдгрдиреАрддрд┐рдпрд╛рдБ


рдмрдбрд╝реЗ рдЬрдЯрд┐рд▓ рд╡рд░реНрдЧреЛрдВ, рдпрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрди рдХрд╛ рд╣реИрдВрдбрд▓рд░ рдПрдХ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрди рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд░рдгрдиреАрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдХрд┐рд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдРрд╕реА рдХрдИ рдореБрдЦреНрдп рд░рдгрдиреАрддрд┐рдпрд╛рдБ рд╣реИрдВ:
1. рдирдХрд▓ рдФрд░ рдЪрд▓рддреА рдХрд╛ рдирд┐рд╖реЗрдз;
2. рд╣реИрдВрдбрд▓рд░ ( рдЧрд╣рд░реА рдкреНрд░рддрд┐ ) рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ ;
3. рдирдХрд▓ рдХреА рдордирд╛рд╣реА, рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐;
4. рд╕рдВрдпреБрдХреНрдд рд╕реНрд╡рд╛рдорд┐рддреНрд╡ (рд╡рд┐рдирд┐рдпрдорд┐рдд, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА рджреНрд╡рд╛рд░рд╛)ред

"рддреАрди рдХрд╛ рдирд┐рдпрдо" рдФрд░ "рдкрд╛рдВрдЪ рдХрд╛ рдирд┐рдпрдо"


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

class my_handler { public: my_handler(int c) : counter_(new int(c)) {} private: int* counter_; }; 


рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рд╣рдореЗрдВ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдХрд╛рдЙрдВрдЯрд░_ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╣реА рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред

 my_handler::~my_handler() {delete counter_;} 


рд▓реЗрдХрд┐рди рдЕрдм рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ? рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2 рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдВрдЧреЗ рдЬреЛ рдПрдХ рд╣реА рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмреБрд░рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдЗрддреНрдпрд╛рджрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рддреЛ рд╕реМрджрд╛ рдХреНрдпрд╛ рд╣реИ? рдЖрдЗрдП рд╣рдореЗрд╢рд╛ рд╕рднреА 5 "рд╡рд┐рд╢реЗрд╖" рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рдердХрд╛рдК рдФрд░ рднрдпрд╛рд╡рд╣ред рдлрд┐рд░ рд╣рдо рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рдХреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдП? рдпрд╣ рднреА рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, "рд╕реНрдерд┐рддрд┐" рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдорд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдирдИ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдЧреА, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖ (рдФрд░, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдо рд╣реИрдВ) рд╕рдВрдХрд▓рдХ рдкреАрдврд╝реА рдХрд▓реНрдкрдирд╛ред рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╕рдВрдЪрд▓рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ 5k рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИ" рдпрд╛ "рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдЪрд╛рд▓рди рд╕рдорд╛рд░реЛрд╣ рд╣реИ"ред

"рд╢реВрдиреНрдп рдХрд╛ рдирд┐рдпрдо"


рдорд╛рд░реНрдЯрд┐рдиреЛ рдлрд░реНрдирд╛рдВрдбреАрдЬ рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ "рд╢реВрдиреНрдп рдирд┐рдпрдо" рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд╛рдЬ рджреА рдЧрдИ рдереА рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА 5k рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рди рдХрд░реЗрдВ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реМрдВрдкреЗрдВ"ред рдФрд░ рдРрд╕реА рд╡рд┐рд╢реЗрд╖ рдХрдХреНрд╖рд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╣реИрдВред рдпреЗ std :: unique_ptr рдФрд░ std :: share_ptr рд╣реИрдВ ред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд╕реНрдЯрдо рд╣рдЯрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХрдо рд╕реЗ рдХрдо рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рд╡рд░реНрдЧ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдВрдпреБрдХреНрдд рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдпрд╛ рд╡рд╣ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рднреА рд╣реИ (рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, рдореНрдпреВрдЯреЗрдХреНрд╕, рд╕реНрдЯреНрд░реАрдо, рдЖрджрд┐), рддреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ std рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ :: unique_ptr with the deleter ред рдЕрдм рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреА рд╡рд╕реНрддреБ рдХреЛ рдХреЙрдкреА (рдХреЗрд╡рд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд) рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдирд╖реНрдЯ рд╣реЛрдиреЗ рдкрд░ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рд╕рд╣реА рд╡рд┐рдирд╛рд╢ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВрдбрд▓рд░ рдХрд╛ рд╢рдмреНрджрд╛рд░реНрде рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рдВрдпреБрдХреНрдд рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рд╛рдЭрд╛_рдкреНрд░рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ ... рд▓реЗрдХрд┐рди рдмрд╣реБрд░реВрдкрддрд╛ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдмрд╕ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╣реА рд╡рд┐рдирд╛рд╢ рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрднрд╛рд╕реА рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ "рд╢реВрдиреНрдп рдирд┐рдпрдо" рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ Shared_ptr рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрд▓реЗрд░ рдиреЗ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рд╣реИ_рдкреНрдЯреНрд░ 'рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░' рдпрд╛рдж рд░рдЦрддрд╛ рд╣реИред

 struct base {virtual void foo() = 0;}; struct derived : base {void foo() override {...}}; base* bad = new derived; delete bad; // !     base { ... std::shared_ptr<base> good = std::make_shared<derived>(); } // ! shared_ptr     . 


рдпрджрд┐ рдЖрдк рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдУрд╡рд░рд╣реЗрдб рдУрд╡рд░рд╣реЗрдб рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рдЖрдк рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рд╡рд┐рд╢реЗрд╖ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдпреВрдиреАрдХ_рдкреНрдЯреНрд░ рдореЗрдВ рднреА рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХрд╕реНрдЯрдо рдбреАрд▓реЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

 typedef std::unique_ptr<base, void(*)(void*)> base_ptr; base_ptr good{new base, [](void* p){delete static_cast<derived*>(p);}}; 


рдмрд╛рдж рдХреА рд╡рд┐рдзрд┐ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рднрд░рд╛ рд╣реИред рдорд▓реНрдЯреАрдкрд▓ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 2 (рдпрд╛ рдЕрдзрд┐рдХ) рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рд▓реАрдЯрд░реНрд╕ рд▓рд┐рдЦрдиреЗ рд╣реЛрдВрдЧреЗ, рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдбрд┐рд▓реАрдЯрд░реНрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рд╕рдВрджрд░реНрдн

flamingdangerzone.com/cxx11/2012/08/15/rule-of-zero.html
scottmeyers.blogspot.ru/2014/03/a-concern-about-rule-of-zero.html
stackoverflow.com/questions/4172722/what-is-the-rule-of-three
stackoverflow.com/questions/4782757/rule-of-three-becomes-rule-of-five-with-c11

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


All Articles