рд╣рдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ "рд╕реА ++, рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЦреБрджрд╛рдИред" рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рднрд╛рд╖рд╛ рдХреА рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рдмрддрд╛рдирд╛ рд╣реИ, рд╕рдВрднрд╡рддрдГ рдХрд╛рдлреА рд╡рд┐рд╢реЗрд╖ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдСрдкрд░реЗрдЯрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ new/delete
ред рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рддреАрд╕рд░рд╛ рд▓реЗрдЦ рд╣реИ, рдкрд╣рд▓рд╛ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдпрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИ , рджреВрд╕рд░рд╛ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдпрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИ ред рдпрд╣ рдЖрд▓реЗрдЦ C ++ рдореЗрдВ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдкрд░ рддреАрди-рд▓реЗрдЦ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╕рдорд╛рдкрди рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рд╖рдп - рд╕реВрдЪреА
рд╡рд┐рд╖рдп - рд╕реВрдЪреА 1. рдирдП / рд╣рдЯрд╛рдП рдЧрдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдорд╛рдирдХ рд░реВрдк
C ++ рдХрдИ рдСрдкрд░реЗрдЯрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ new/delete
ред рдЙрдиреНрд╣реЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдорд╛рдирдХ, рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдирдХ рдФрд░ рдХрд╕реНрдЯрдо рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдиреБрднрд╛рдЧ рдФрд░ рдЦрдВрдб 2 рдорд╛рдирдХ рд░реВрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ; рдЕрдиреБрднрд╛рдЧ 3 рдореЗрдВ рдХрд╕реНрдЯрдо рд░реВрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред1.1ред рдореВрд▓ рдорд╛рдирдХ рд░реВрдк
new/delete
рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдореБрдЦреНрдп рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ T
:new T()
new T[]
delete ptr;
delete[] ptr;
рдЙрдирдХреЗ рдХрд╛рдо рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ new
, рддреЛ рдореЗрдореЛрд░реА рдкрд╣рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЪрдпрди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ delete
рд╕рдм рдХреБрдЫ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ: рдкрд╣рд▓реЗ, рд╡рд┐рдирд╛рд╢рдХрд░реНрддрд╛ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдПредрдЬрдм рд╕рдВрдЪрд╛рд▓рдХnew[]
рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдореГрддрд┐ рдХреЛ рдкрд╣рд▓реЗ рдкреВрд░реЗ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЪрдпрди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдпрд╛ рдПрдХ рдЕрдиреНрдп рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдпрджрд┐ рдПрдХ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рд╣реИ) рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рднреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ рд╕рд░рдгреА рдХреЗ рд╕рднреА рдмрдирд╛рдП рдЧрдП рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЙрд▓ рдХреЗ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рд╕рд░рдгреА рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ delete[]
, рдФрд░ рд╕рд░рдгреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлрд┐рд░ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдзреНрдпрд╛рди! рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╣реА рд░реВрдк рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИdelete
рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд╕реНрддреБ рдпрд╛ рдПрдХ рд╕рд░рдгреА рд╣рдЯрд╛рдИ рдЧрдИ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕ рдирд┐рдпрдо рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдЖрдк рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рд╕реНрдореГрддрд┐ рд▓реАрдХ, рджреБрд░реНрдШрдЯрдирд╛, рдЖрджрд┐ред рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП [Meyers1] рджреЗрдЦреЗрдВредрдЙрдкрд░реЛрдХреНрдд рд╡рд┐рд╡рд░рдг рдореЗрдВ, рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реИред рддрдерд╛рдХрдерд┐рдд рддреБрдЪреНрдЫ рдкреНрд░рдХрд╛рд░реЛрдВ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░, рд╕реА-рд╢реИрд▓реА рд╕рдВрд░рдЪрдирд╛рдУрдВ) рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИредрдорд╛рдирдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдлрд╝рдВрдХреНрд╢рди, рдЬрдм рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВ std::bad_alloc
ред рд▓реЗрдХрд┐рди рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ set_new_handler()
, рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП [Meyb1] рджреЗрдЦреЗрдВредрд╕рдВрдЪрд╛рд▓рдХ рдХрд╛ рдХреЛрдИ рд░реВрдкdelete
null рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВредрдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╕рдордп, new[]
рдЖрдХрд╛рд░ рдХреЛ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдСрдкрд░реЗрдЯрд░ рдХреЗ рджреЛрдиреЛрдВ рд░реВрдк new
рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВредnew int{42}
new int[8]{1,2,3,4}
1.2ред рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдирдХ рд░реВрдк
рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп <new>
, 4 рдФрд░ рдорд╛рдирдХ рдСрдкрд░реЗрдЯрд░ рд░реВрдк рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ new
:new(ptr) T();
new(ptr) T[];
new(std::nothrow) T();
new(std::nothrow) T[];
рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рдХреЛ new
рдЧреИрд░-рдЖрд╡рдВрдЯрди рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ new
ред рдПрдХ рддрд░реНрдХ ptr
рд╕реНрдореГрддрд┐ рдХреЗ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ рдЬреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╛ рд╕рд░рдгреА рдХреЛ рдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдмрдбрд╝рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕рдВрд░реЗрдЦрдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг new
рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдХреЙрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдЪрд░рдгреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред рдСрдкрд░реЗрдЯрд░ delete
рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реАрдзреЗ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдореЗрдореЛрд░реА рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореБрдХреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИредрджреВрд╕рд░реЗ рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдСрдкрд░реЗрдЯрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдирд╣реАрдВ рдлреЗрдВрдХрдирд╛ new
(nothrow new
) рдФрд░ рдЗрд╕рдореЗрдВ рднрд┐рдиреНрдирддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рддреЛ рд╡реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЬрд╛рддреЗ рд╣реИрдВ nullptr
, рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрддреЗ рд╣реИрдВ std::bad_alloc
ред рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдореБрдЦреНрдп рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ delete
ред рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред1.3ред рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдФрд░ рдирд┐: рд╢реБрд▓реНрдХ рдХрд╛рд░реНрдп
рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдорд╛рдирдХ рд░реВрдк new/delete
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рдВрдЯрди рдФрд░ рдирд┐рдкрдЯрд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:void* operator new(std::size_t size);
void operator delete(void* ptr);
void* operator new[](std::size_t size);
void operator delete[](void* ptr);
void* operator new(std::size_t size, void* ptr);
void* operator new[](std::size_t size, void* ptr);
void* operator new(std::size_t size, const std::nothrow_t& nth);
void* operator new[](std::size_t size, const std::nothrow_t& nth);
рдпреЗ рдХрд╛рд░реНрдп рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╣реЛрд╕реНрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдПрд▓реЛрдХреЗрд╢рди рдлрдВрдХреНрд╢рди new
рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЬрд╛рддреЗ рд╣реИрдВ ptr
редрд╕реА ++ 17 рдиреЗ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдФрд░ рдбреАрд▓рдХреНрд▓реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛, рдЬреЛ рд╕рдВрд░реЗрдЦрдг рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпреЗ рдЙрдирдореЗ рд╕реЗ рдХреБрдЫ рд╣реИ:void* operator new (std::size_t size, std::align_val_t al);
void* operator new[](std::size_t size, std::align_val_t al);
рдпреЗ рд░реВрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╕рдВрд░реЗрдЦрдг рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╢реНрд░реЗрд╖реНрда рд╣реЛрддреА рд╣реИрдВ __STDCPP_DEFAULT_NEW_ALIGNMENT__
, рдЗрд╕рд▓рд┐рдП рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд▓рддреА рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЫрд┐рдкрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ (рджреЗрдЦреЗрдВ рдЦрдВрдб 2.2.1)ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ C ++ 11 рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛редstruct alignas(32) X { };
2. рдирдП / рд╣рдЯрд╛рдП рдЧрдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдорд╛рдирдХ рд░реВрдкреЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдирд╛
рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдорд╛рдирдХ рд░реВрдкреЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб new/delete
рдХрд░рдиреЗ рдореЗрдВ рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рдирдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдорд╛рдирдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдпрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрд╢реНрд╡рд┐рдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдирд╣реАрдВред рдорд╛рдирдХ рд╣реЛрд╕реНрдЯ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдЖрдмрдВрдЯрди рдлрд╝рдВрдХреНрд╢рди new
рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рдж, рд╕рдВрдмрдВрдзрд┐рдд рдСрдкрд░реЗрдЯрд░ new/delete
рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдорд╛рдирдХ рд╡рд╛рд▓реЗ рдирд╣реАрдВред2.1ред рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рдЕрдзрд┐рднрд╛рд░
рдорд╛рди рд▓реАрдЬрд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ:void* operator new(std::size_t size)
{
}
void operator delete(void* ptr)
{
}
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ new/delete
рдореЗрдВ рдкреВрд░реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ (рдорд╛рдирдХ рд▓реЛрдЧреЛрдВ рд╕рд╣рд┐рдд) рдХреЗ рд▓рд┐рдП рд╕рднреА рдСрдкрд░реЗрдЯрд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди) рд╣реЛрдЧрд╛ ред рдЗрд╕рд╕реЗ рдкреВрд░реА рдЕрд░рд╛рдЬрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд░реНрдгрд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рддрдВрддреНрд░ рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрдВрддреНрд░ рд╣реИ, рди рдХрд┐ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕реА ++ рддрдВрддреНрд░ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВ (рдСрдкрд░реЗрдЯрд░ ::
рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рдФрд░ рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рд╣реЛрддрд╛ рд╣реИредрдЧреНрд▓реЛрдмрд▓ рдиреЗрдорд╕реНрдкреЗрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдорд╛рд░реЛрд╣void* operator new(std::size_t size, const std::nothrow_t& nth)
{
}
рдпрд╣ рдорд╛рдирдХ рдПрдХ рдХреЛ рднреА рдмрджрд▓ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХрдо рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЬреЛ рдСрдкрд░реЗрдЯрд░ рдЕрдкрд╡рд╛рджреЛрдВ new
рдХреЛ рдирд╣реАрдВ рдлреЗрдВрдХрддреЗ рд╣реИрдВ , рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдорд╛рдирдХ рд░реВрдк рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИредрд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕реНрдерд┐рддрд┐ред рдЧреНрд▓реЛрдмрд▓ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВрдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ new/delete
рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред2.2ред рдХрдХреНрд╖рд╛ рдЕрдзрд┐рднрд╛рд░
new/delete
рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдиреБрдХрд╕рд╛рди рд╕реЗ рд░рд╣рд┐рдд рд╣реИрдВред рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗрд╡рд▓ рддрдм рд╣реА рдкреНрд░рднрд╛рд╡реА рд╣реЛрддреА рд╣реИ, рдЬрдм рдЖрдкрд░реЗрдЯрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдмрдирд╛рддреЗ рдФрд░ рд╣рдЯрд╛рддреЗ рд╣реИрдВ new/delete
ред рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, ::
рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВредclass X
{
public:
void* operator new(std::size_t size)
{
std::cout << "X new\n";
return ::operator new(size);
}
void operator delete(void* ptr)
{
std::cout << "X delete\n";
::operator delete(ptr);
}
void* operator new[](std::size_t size)
{
std::cout << "X new[]\n";
return ::operator new[](size);
}
void operator delete[](void* ptr)
{
std::cout << "X delete[]\n";
::operator delete[](ptr);
}
};
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЛ рдХреЗрд╡рд▓ рдорд╛рдирдХ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм, рд╢рдмреНрджреЛрдВ рдореЗрдВ new X()
рдФрд░ new X[N]
рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛редрдпреЗ рдХрд╛рд░реНрдп рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ static
ред рд▓реЗрдХрд┐рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╡реЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рдЗрдВрд╕реНрдЯреЗрдВрд╕ operator new()
рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЙрд▓ operator delete()
рдЗрд╕рдХреЗ рд╡рд┐рд▓реЛрдкрди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрднреА рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди operator delete()
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЖрднрд╛рд╕реА рд╣реИред рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдмрд┐рдирд╛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ static
ред2.2.1ред рдирдП / рд╣рдЯрд╛рдП рдЧрдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдорд╛рдирдХ рд░реВрдкреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ
рдСрдкрд░реЗрдЯрд░реНрд╕ new/delete
, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдВрдЬрд╛рдЗрд╢ рд╕рдВрдХрд▓реНрдк рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ::new(p) X()
ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ operator new()
рдореЗрдВ, рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕реА рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрд╕реА рддрд░рд╣, рдЖрдк рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ delete
ред2.2.2ред рдирдП / рд╣рдЯрд╛рдП рдЧрдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдЕрдиреНрдп рд░реВрдкреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдирд╛
рдпрджрд┐ рдЕрдм рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП X
рд╣рдо рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ рдпрд╛ рди рдлреЗрдВрдХрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ new
, рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди operator new(std::size_t size)
рдЕрдиреНрдп рд░реВрдкреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдПрдЧрд╛ operator new()
ред рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпреЗ рд╡рд┐рдХрд▓реНрдк рдорд╛рдирдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдмрд╕ рд╕реМрдВрдкрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рджреВрд╕рд░реЗ рдореЗрдВ, рдЖрдкрдХреЛ new
рдПрдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдСрдкрд░реЗрдЯрд░ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ::new(p) X()
ред2.2.3ред рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░
рдпрджрд┐ рд╣рдо рдЙрджрд╛рд╣рд░рдгреЛрдВ X
рдХреЛ рдХреБрдЫ рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП std::vector<X>
, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЕрдкрдирд╛ рддрдВрддреНрд░ рд╣реИ (рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рдВрдЯрди рд╡рд░реНрдЧ, рдЬреЛ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ), рдФрд░ рд╡реЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ new
ред2.2.4ред рд╡рд┐рд░рд╛рд╕рдд
рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВред рдпрджрд┐ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдХ рдореЗрдВ рдирд╣реАрдВ, рддреЛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рднрд╛рд░рд┐рдд new/delete
рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдЕрдм рдПрдХ рдкреЙрд▓реАрдореЙрд░реНрдлрд┐рдХ рдХреНрд▓рд╛рд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ new/delete
ред рдЕрдм, рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдСрдкрд░реЗрдЯрд░ delete
рдХреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП ред рдпрджрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдЖрднрд╛рд╕реА рд╣реИ, рддреЛ рдорд╛рдирдХ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХреЗ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ operator delete()
, рдЗрд╕ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рдЧрд╛рд░рдВрдЯреА рднреА рд╣реИ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд╝рдВрдХреНрд╢рди operator delete()
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрднрд╛рд╕реА рд╣реИред2.2.5ред рдСрдкрд░реЗрдЯрд░ рдбрд┐рд▓реАрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк
рдПрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬрдм рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдпрд╣ рдХрднреА-рдХрднреА рд╕реНрдореГрддрд┐ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ:void operator delete(void* p, std::size_t size);
void operator delete[](void* p, std::size_t size);
рдкреИрд░рд╛рдореАрдЯрд░ size
рддрддреНрд╡ рдХрд╛ рдЖрдХрд╛рд░ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ) рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдлрд╝реЙрд░реНрдо рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред3. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдкрд░реЗрдЯрд░ рдирдП / рд╣рдЯрд╛рдПрдВ
C ++ new
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реЙрд░реНрдо рдХреЗ рдХрд╕реНрдЯрдо рдСрдкрд░реЗрдЯрд░ рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ:new() T()
new() T[]
рдЗрди рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:void* operator new(std::size_t size, );
void* operator new[](std::size_t size, );
void operator delete(void* p, );
void operator delete[](void* p, );
рд╕реНрдореГрддрд┐ рдЖрдмрдВрдЯрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ void*
рдпрд╛ рдПрдХ рд╕реЗ рдорд┐рд▓рдХрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП const std::nothrow_t&
, рдЕрд░реНрдерд╛рдд, рдЙрдирдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдорд╛рдирдХ рдорд╛рдирдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪрд┐рдпрд╛рдБ operator new()
рдФрд░ operator delete()
рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдСрдкрд░реЗрдЯрд░ рдХреЛ рджрд┐рдП рдЧрдП рддрд░реНрдХ new
рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди operator delete()
рд╡реИрдХрд▓реНрдкрд┐рдХ рдЖрдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИредрдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдпрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрд╢реНрд╡рд┐рдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдирд╣реАрдВред рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рднрд╛рд░, рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдирдХ рдХрд╛рд░реНрдп рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдорд╛рдирд┐рдд рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдФрд░ рдорд╛рдирдХ рдХрд╛рд░реНрдп рд╣рдореЗрд╢рд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡реЗ рдорд╛рдирдХ рд░реВрдкреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдорд╛рдирдХ рд░реВрдкреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ ::
, рдпрд╣ рдЦрдВрдб 2.2 рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИредрдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ -рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдСрдкрд░реЗрдЯрд░ рд░реВрдкреЛрдВ new
рдХреЛ new
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ new
ред рдЙрдиреНрд╣реЗрдВ new
рдЦрдВрдб 1.2 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдорд╛рдирдХ (рдЧреИрд░-рдЖрд╡рдВрдЯрди) рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП редрд╕рдВрдмрдВрдзрд┐рдд рдСрдкрд░реЗрдЯрд░ рдлреЙрд░реНрдо delete
рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ new
рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди operator new()
рдорд╛рдирдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдСрдкрд░реЗрд╢рди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдорд╛рдирдХ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ delete
ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди operator delete()
ред рдХрдВрдкрд╛рдЗрд▓рд░ operator delete()
рдХреЗрд╡рд▓ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ : рдЬрдм new
рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИредрдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ (рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ)редvoid* operator new(std::size_t size, int a, const char* b)
{
std::cout << "new " << a << " + " << b << "\n";
return ::operator new(size);
}
void operator delete(void* p, int a, const char* b)
{
std::cout << "delete " << a << " + " << b << "\n";
::operator delete(p);
}
class X {};
X* p = new(42, "meow") X();
delete p;
4. рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛
рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдп operator new()
рдФрд░ operator delete()
рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдВрдЪрд╛рд▓рди рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ new/delete
рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд / рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рддрдВрддреНрд░ рдмрдирд╛рдирд╛ рд╣реИред рдХрд╛рд░реНрдп рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╣рд░ рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдХреЙрдЯ рдореЗрдпрд░реНрд╕ [Meyers1] рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ (рдмреЗрд╢рдХ, рдореБрдЦреНрдп рдПрдХ рджрдХреНрд╖рддрд╛ рд╣реИ)ред рд╡рд╣ рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ (рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЬреБрдбрд╝реА рдореБрдЦреНрдп рддрдХрдиреАрдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИset_new_handler()
, рдорд▓реНрдЯреА рдереНрд░реЗрдбреЗрдб рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди, рдЕрд▓рд╛рдЗрдирдореЗрдВрдЯ)ред рдЧрдирдерд░реЛрде рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдФрд░ рдбреАрд▓рдХреНрд▓реЛрд▓реЗрд╢рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдмреВрд╕реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдкреВрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред5. рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдПрд▓реЛрдХреЗрдЯрд░ рдХрдХреНрд╖рд╛рдПрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░ рдЖрд╡рдВрдЯрди рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЖрд╡рдВрдЯрди рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдХрдХреНрд╖рд╛рдПрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдРрд╕реЗ рд╡рд░реНрдЧ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЙрджреНрджреЗрд╢реНрдп рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ new/delete
ред [рдЧрдирдереЛрд░рде] рдЗрд╕ рддрд░рд╣ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИредрдЧреНрд░рдиреНрдерд╕реВрдЪреА
[рдЧреБрдиреНрдерд░реЛрде]рдЧреБрдВрдЯрд░реЛрде, рдХрд░реНрдЯред C ++ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рдиред рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рджреНрдз рддрд░реАрдХреЗ ред: рдкреНрд░рддрд┐ред рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ - рдПрд╕рдкреАрдмреАред: рдЕрд▓реНрдлрд╛-рдмреБрдХ рдПрд▓рдПрд▓рд╕реА, 2017.[рдореЗрдпрд░реНрд╕ 1] рдореЗрдпрд░реНрд╕, рд╕реНрдХреЙрдЯред C ++ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдЙрдкрдпреЛрдЧред 55 рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ ред: рдкреНрд░рддрд┐ред рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ - рдПрдо .: рдбреАрдПрдордХреЗ рдкреНрд░реЗрд╕, 2014ред