рдмреИрдардХ рд╕реА ++, рдбрд╕реЗрд▓рдбреЛрд░реНрдл
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ C ++ рдкрд░
рд╕рдореНрдореЗрд▓рди рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рд╕реНрддрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, GoingNative рдирд╣реАрдВ рд╣реИ: рд░рд┐рдкреЛрд░реНрдЯ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХреА рдереАрдВред рджреЛрдиреЛрдВ рдмрд╣реБрдд рдордЬрдмреВрдд рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд╛рд▓реАред рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдорд╛рд╣реМрд▓ рдерд╛ - рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдЗрддрдиреЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рд╣реИред рдореБрдЭреЗ рдпрд╣ рдЗрддрдирд╛ рдкрд╕рдВрдж рдЖрдпрд╛ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ C ++ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ред рд▓реЗрдХрд┐рди рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╕рдореНрдореЗрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдореИрдВ рд╕рднреА рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ рдФрд░ рдЬрд┐рдиреНрд╣реЗрдВ рд▓рдЧрднрдЧ рд╣рд░ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореБрдЦреНрдп рд░реБрдЭрд╛рди
- рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ;
- рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ;
- рдиреЗрдЯ
- рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдпрд┐рди рдФрд░ рдпрд╛рдВрдЧ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ
- рдорд▓реНрдЯреА-рдХреЛрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ c ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдХреЗрд▓рд┐рдВрдЧ;
- рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдкрд░ c ++ред
рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕рднреА рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ Habr├й (
1 ,
2 ,
3 ) рдкрд░ рдХрдИ рдкреЛрд╕реНрдЯ рджреЗрддреА рд╣реИред рд▓рдЧрднрдЧ рд╣рд░ рд╡рдХреНрддрд╛ рдиреЗ рдЙрд╕рд╕реЗ рдХреБрдЫ рдЫреАрдирд╛ред рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ, рдПрд░рд┐рдХ рдирд┐рдмрд▓рд░ рдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдЕрдм рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред рд╕рд┐рдВрдХ рддрд░реНрдХреЛрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд▓реЗрдЯ
1 рдорд┐рд▓реАред
рд╢реНрд░реЗрдгреА | C ++ 11 рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ |
---|
рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ : рдЫреЛрдЯреЗ рдФрд░ рд╕рд┐рдВрдХ рдорд╛рди рдмрд╛рдХреА рд╕рдм | рдореВрд▓реНрдп рд╕реЗ рдЧреБрдЬрд╛рд░реЗрдВ рдХреЙрдиреНрд╕реНрдЯ рд░реЗрдл |
рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп | рдореВрд▓реНрдп рд╕реЗ рдЧреБрдЬрд╛рд░реЗрдВ |
рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ | рд╕реНрдЯреЗрдЯрдлреБрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдСрдмреНрдЬреЗрдХреНрдЯ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ |
asynchrony
рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕реЗ "рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ", рд╢рд┐рдХрд╛рдпрддреЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕реБрдиреА рдЬрд╛рддреА рдереАрдВ: рдЖрдЦрд┐рд░рдХрд╛рд░, рднрд╛рд╖рд╛ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдЕрднреА рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рднреА рдЕрд░реНрде рдЦреЛ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдп рдХреЗ рдорд╛рдирдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, std :: async рдФрд░ std :: рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, C ++ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдореГрдд рд╣реИред рдЖрдк рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдЪреНрдЫреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдпрд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рднрд╛рд╖рд╛ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЦрдбрд╝реА рдереА рд╡рд╣ рдЕрднреА рднреА рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдмрдпрд╛рдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЙрдбрд▓ рдХреЗрд╡рд▓ C ++ 17 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдмрдХрд┐ рдЖрдк рдЙрд╕рдХреЗ рд╡рд░реНрдгрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдкреГрдереНрд╡реА рдкрд░ рдЗрд╕ рд╕реНрд╡рд░реНрдЧ рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреЛрдИ рдирдИ рдмрд╛рдд рдирд╣реАрдВ!
- POSIX: aio;
- FreeBSD: kqueue;
- рд▓рд┐рдирдХреНрд╕: рдПрдкреЛрд▓;
- рдХрд╣реАрдВ рднреА рдмрдврд╝рд╛рд╡рд╛ :: asioред
рдиреЗрдЯрд╡рд░реНрдХ
рд╕рдм рдХреБрдЫ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ (рдпрджрд┐ рдмрджрддрд░ рдирд╣реАрдВ рд╣реИ) рдХреЗ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ рдЙрджрд╛рд╕ рд╣реИред
WG21 / SG4 (рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдорд╛рдирдХреАрдХрд░рдг рд╕рдорд┐рддрд┐ рдореЗрдВ рдПрдХ рд╢реЛрдз рд╕рдореВрд╣) рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдиреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд░реЛрдбрдореИрдк рд▓рд╛рдпрд╛:
- 2014 - рдиреЗрдЯрд╡рд░реНрдХ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░, рдпреВрдЖрд░рдЖрдИ, рдЖрдИрдкреА рдкрддрд╛;
- 201X - рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЙрдбрд▓ (рдПрдХ рд╣реА), HTTP, рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░;
- 201Y - рд╕реЙрдХреЗрдЯреНрд╕, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо;
- 201Z - рдПрд╕рдПрд╕рдПрд▓, рдЖрдИрд╕реАрдПрдордкреАред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдмрд╣реБрдд рдЙрджрд╛рд╕ рд╣реВрдВ рдХрд┐ рдорд╛рдирдХ рдореЗрдВ HTTP рд╕реЙрдХреЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭреВрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ HTTP рдХреА рдорд╛рдВрдЧ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред
рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдПрдВ
рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЖрд╡рд╛рдЬ рддреБрд░рдВрдд рдмрд╛рддрдЪреАрдд рдореЗрдВ рдлрдЯ рдЬрд╛рддреА рд╣реИ: "рдореИрдВ рдареАрдХ рд╕реЗ рдХрдИ рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?" рдФрд░ "рдореИрдВ рдПрдореНрдмреЗрдбреЗрдб рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?"ред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ C ++ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдмрдХрд╡рд╛рд╕ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдкрд░рд┐рдЪрд┐рдд рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ:
- рд╕рдВрдпреБрдХреНрдд рд╕реНрдЯреНрд░рд╛рдЗрдХ рдлрд╛рдЗрдЯрд░ рдПрдпрд░ рд╡реНрд╣реАрдХрд▓ C ++ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХ, рд▓реЙрдХрд╣реАрдб рдорд╛рд░реНрдЯрд┐рди рдХреЙрд░реНрдкреЛрд░реЗрд╢рди, 2005;
- MISRA-C: 2008 - рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ C ++ рднрд╛рд╖рд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢, MIRA рд▓рд┐рдорд┐рдЯреЗрдб, 2008;
- рд╕реА ++ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рддрдХрдиреАрдХреА рд░рд┐рдкреЛрд░реНрдЯ , рдЕрдзреНрдпрд╛рдп 7 рдПрдВрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реА ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
C ++ 11 рдХреЗ рдкрд╣рд▓реВ рдореЗрдВ, рджреЛрдиреЛрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╣рдорд╛рд░рд╛ рдкрд╕рдВрджреАрджрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ: рдпрд╣ рд╣рдореЗрдВ рд▓реЙрдХ-рдФрд░ рдорд▓реНрдЯреА-рдХреЛрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛-рдореБрдХреНрдд рджреЗрддрд╛ рд╣реИ, рд╣рдо рдПрдореНрдмреЗрдбреЗрдб рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдереНрд░реЗрдб рд╕реЗ рджреВрд░ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
- рд╣рдо PODs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм is_pod, is_trivial, is_standard_layout рд╣реИ рдЬреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп (рд╣рд╛рдБ, рд╣рдо рднреА) рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдмреНрд▓реЙрдХ рдореЗрдВ рдореЗрдореЛрд░реА рдХрд╣рд╛рдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдмрд┐рдЯ-рд╡рд╛рд░ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рдХрд╣реАрдВ рднреА рдмрд┐рдирд╛ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдХрджрдо рдирд╣реАрдВред рд╣рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЖрдВрджреЛрд▓рдиреЛрдВ рдкрд░ рдмрдЪрдд рдХрд░рддреЗ рд╣реИрдВред
- рд╣рдо рд╡рд╣ рд╕рдм рдХреБрдЫ рдирд┐рдХрд╛рд▓ рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрдХрд▓рди рдХреЗ рд╕реНрддрд░ рдкрд░ рд╕рдВрднрд╡ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ std :: array рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╣рдо рдбрд╛рдпрдирд╛рдорд┐рдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред
- рд╣рдо std :: рд╕рд╛рдЭрд╛_ptr, std :: unique_ptr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВред
рд╡реИрд╕реЗ, std рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ :: share_ptr
Going Native'2012 рдХреА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ std рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП :: make_sared рдХреЗ рдмрдЬрд╛рдп std :: shared_ptr рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░:
auto sp1 = make_shared<T>( args )
рд░реЗрдирд░ рдЧреНрд░рд┐рдо рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдирд╣реАрдВ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдпрдорд┐рдд рд╕рдВрдХреЗрдд, рдПрд╕рдЯреАрдбреА :: рд╢реЗрдпрд░реНрдб_рдПрдкреНрдЯреНрд░ рдФрд░ рдПрд╕рдЯреАрдбреА :: рдпреВрдирд┐рдХ_рдкреНрд░рдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
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_ptr | 2.9 рд╕реЗрдХреЗрдВрдбред | 5.7 рд╕реЗрдХрдВрдбред |
std :: рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ | 6.0 рд╕реЗрдХрдВрдбред | 11.8 рд╕реЗрдХреЗрдВрдбред |
std :: make_sared | | 6.5 рд╕реЗрдХрдВрдбред |
рд╕рдВрджрд░реНрдн
1.
рдПрд░рд┐рдХ рдиреАрдмреНрд▓рд░, рд╕реА ++ 11 рдФрд░ рдиреЛ-рд╕рдордЭреМрддрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд┐рдЬрд╛рдЗрди2.
рдкреИрд░рд╛рдореАрдЯрд░реНрд╕, рдореВрд╡рдореЗрдВрдЯ рд╢рдмреНрджрд╛рд░реНрде рдФрд░ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо3.
рд░реЗрдирд░ рдЧреНрд░рд┐рдо, рд╕реА ++ 11 рдХреЗ рд╕рд╛рде рдПрдВрдмреЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ