рдмреИрдардХ рд╕реА ++ 2013

рдмреИрдардХ рд╕реА ++, рдбрд╕реЗрд▓рдбреЛрд░реНрдл


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

рдореБрдЦреНрдп рд░реБрдЭрд╛рди


рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ

рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕рднреА рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ Habr├й ( 1 , 2 , 3 ) рдкрд░ рдХрдИ рдкреЛрд╕реНрдЯ рджреЗрддреА рд╣реИред рд▓рдЧрднрдЧ рд╣рд░ рд╡рдХреНрддрд╛ рдиреЗ рдЙрд╕рд╕реЗ рдХреБрдЫ рдЫреАрдирд╛ред рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ, рдПрд░рд┐рдХ рдирд┐рдмрд▓рд░ рдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдЕрдм рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред рд╕рд┐рдВрдХ рддрд░реНрдХреЛрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд▓реЗрдЯ 1 рдорд┐рд▓реАред
рд╢реНрд░реЗрдгреАC ++ 11 рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ :
рдЫреЛрдЯреЗ рдФрд░ рд╕рд┐рдВрдХ рдорд╛рди
рдмрд╛рдХреА рд╕рдм

рдореВрд▓реНрдп рд╕реЗ рдЧреБрдЬрд╛рд░реЗрдВ
рдХреЙрдиреНрд╕реНрдЯ рд░реЗрдл
рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпрдореВрд▓реНрдп рд╕реЗ рдЧреБрдЬрд╛рд░реЗрдВ
рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░рд╕реНрдЯреЗрдЯрдлреБрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдСрдмреНрдЬреЗрдХреНрдЯ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

asynchrony

рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕реЗ "рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ", рд╢рд┐рдХрд╛рдпрддреЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕реБрдиреА рдЬрд╛рддреА рдереАрдВ: рдЖрдЦрд┐рд░рдХрд╛рд░, рднрд╛рд╖рд╛ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдЕрднреА рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рднреА рдЕрд░реНрде рдЦреЛ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдп рдХреЗ рдорд╛рдирдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, std :: async рдФрд░ std :: рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, C ++ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдореГрдд рд╣реИред рдЖрдк рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдЪреНрдЫреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдпрд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рднрд╛рд╖рд╛ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЦрдбрд╝реА рдереА рд╡рд╣ рдЕрднреА рднреА рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдмрдпрд╛рдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЙрдбрд▓ рдХреЗрд╡рд▓ C ++ 17 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдмрдХрд┐ рдЖрдк рдЙрд╕рдХреЗ рд╡рд░реНрдгрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред
рдкреГрдереНрд╡реА рдкрд░ рдЗрд╕ рд╕реНрд╡рд░реНрдЧ рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреЛрдИ рдирдИ рдмрд╛рдд рдирд╣реАрдВ!

рдиреЗрдЯрд╡рд░реНрдХ

рд╕рдм рдХреБрдЫ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ (рдпрджрд┐ рдмрджрддрд░ рдирд╣реАрдВ рд╣реИ) рдХреЗ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ рдЙрджрд╛рд╕ рд╣реИред WG21 / SG4 (рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдорд╛рдирдХреАрдХрд░рдг рд╕рдорд┐рддрд┐ рдореЗрдВ рдПрдХ рд╢реЛрдз рд╕рдореВрд╣) рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдиреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд░реЛрдбрдореИрдк рд▓рд╛рдпрд╛:

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдмрд╣реБрдд рдЙрджрд╛рд╕ рд╣реВрдВ рдХрд┐ рдорд╛рдирдХ рдореЗрдВ HTTP рд╕реЙрдХреЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭреВрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ HTTP рдХреА рдорд╛рдВрдЧ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред
рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдПрдВ

рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЖрд╡рд╛рдЬ рддреБрд░рдВрдд рдмрд╛рддрдЪреАрдд рдореЗрдВ рдлрдЯ рдЬрд╛рддреА рд╣реИ: "рдореИрдВ рдареАрдХ рд╕реЗ рдХрдИ рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?" рдФрд░ "рдореИрдВ рдПрдореНрдмреЗрдбреЗрдб рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?"ред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ C ++ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдмрдХрд╡рд╛рд╕ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдкрд░рд┐рдЪрд┐рдд рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ:

C ++ 11 рдХреЗ рдкрд╣рд▓реВ рдореЗрдВ, рджреЛрдиреЛрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡реИрд╕реЗ, std рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ :: share_ptr Going Native'2012 рдХреА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ std рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП :: make_sared рдХреЗ рдмрдЬрд╛рдп std :: shared_ptr рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░:
auto sp1 = make_shared<T>( args ); // 1 allocation, 24 bytes overhead shared_ptr<T> sp2( new T( args ) ); // 2 allocations, 40 bytes overhead 

рд░реЗрдирд░ рдЧреНрд░рд┐рдо рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдирд╣реАрдВ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдпрдорд┐рдд рд╕рдВрдХреЗрдд, рдПрд╕рдЯреАрдбреА :: рд╢реЗрдпрд░реНрдб_рдПрдкреНрдЯреНрд░ рдФрд░ рдПрд╕рдЯреАрдбреА :: рдпреВрдирд┐рдХ_рдкреНрд░рдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред 3
 auto st = std::chrono::system_clock::now(); for (long long i=0 ; i < 100000000; ++i){ int* tmp(new int(i)); delete tmp; // std::unique_ptr<int> tmp(new int(i)); // std::shared_ptr<int> tmp(new int(i)); // std::shared_ptr<int> tmp= std::make_shared<int>(i); } std::chrono::duration<double> dur=std::chrono::system_clock::now() - st(); std::cout << dur.count(); 

рдРрд╕реА рддреБрд▓рдирд╛ рддрд╛рд▓рд┐рдХрд╛ рдорд┐рд▓реАред
рд╕реВрдЪрдХ рдкреНрд░рдХрд╛рд░рдЕрд╕рд▓реА рд╣рд╛рд░реНрдбрд╡реЗрдпрд░рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди
рджреЗрд╢реА3.0 рд╕реЗрдХрдВрдбред5.7 рд╕реЗрдХрдВрдбред
std :: unique_ptr2.9 рд╕реЗрдХреЗрдВрдбред5.7 рд╕реЗрдХрдВрдбред
std :: рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛6.0 рд╕реЗрдХрдВрдбред11.8 рд╕реЗрдХреЗрдВрдбред
std :: make_sared6.5 рд╕реЗрдХрдВрдбред



рд╕рдВрджрд░реНрдн
1. рдПрд░рд┐рдХ рдиреАрдмреНрд▓рд░, рд╕реА ++ 11 рдФрд░ рдиреЛ-рд╕рдордЭреМрддрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд┐рдЬрд╛рдЗрди
2. рдкреИрд░рд╛рдореАрдЯрд░реНрд╕, рдореВрд╡рдореЗрдВрдЯ рд╢рдмреНрджрд╛рд░реНрде рдФрд░ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо
3. рд░реЗрдирд░ рдЧреНрд░рд┐рдо, рд╕реА ++ 11 рдХреЗ рд╕рд╛рде рдПрдВрдмреЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ


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


All Articles