C ++ рдореЗрдВ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧред рднрд╛рдЧ III рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдирдП / рдбрд┐рд▓реАрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ


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


рд╡рд┐рд╖рдп - рд╕реВрдЪреА


рд╡рд┐рд╖рдп - рд╕реВрдЪреА
  1. new/delete
    1.1.
    1.2.
    1.3.
  2. new/delete
    2.1.
    2.2.
      2.2.1. new/delete
      2.2.2. new/delete
      2.2.3.
      2.2.4.
      2.2.5. operator delete()
  3. new/delete
  4.
  5. -
  

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] рджреЗрдЦреЗрдВред

рд╕рдВрдЪрд╛рд▓рдХ рдХрд╛ рдХреЛрдИ рд░реВрдкdeletenull рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╕рдордп, 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(); // : new 42 + meow
delete p; //   ::operator delete()

4. рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛


рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдп operator new()рдФрд░ operator delete()рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╕рдВрдЪрд╛рд▓рди рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ new/deleteрдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд / рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рддрдВрддреНрд░ рдмрдирд╛рдирд╛ рд╣реИред рдХрд╛рд░реНрдп рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╣рд░ рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдХреЙрдЯ рдореЗрдпрд░реНрд╕ [Meyers1] рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ (рдмреЗрд╢рдХ, рдореБрдЦреНрдп рдПрдХ рджрдХреНрд╖рддрд╛ рд╣реИ)ред рд╡рд╣ рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдХреНрдд рдХрд░рдиреЗ (рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЬреБрдбрд╝реА рдореБрдЦреНрдп рддрдХрдиреАрдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИset_new_handler(), рдорд▓реНрдЯреА рдереНрд░реЗрдбреЗрдб рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди, рдЕрд▓рд╛рдЗрдирдореЗрдВрдЯ)ред рдЧрдирдерд░реЛрде рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдФрд░ рдбреАрд▓рдХреНрд▓реЛрд▓реЗрд╢рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдмреВрд╕реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдкреВрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

5. рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдПрд▓реЛрдХреЗрдЯрд░ рдХрдХреНрд╖рд╛рдПрдВ


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдорд╛рдирдХ рдХрдВрдЯреЗрдирд░ рдЖрд╡рдВрдЯрди рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЖрд╡рдВрдЯрди рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдХрдХреНрд╖рд╛рдПрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдРрд╕реЗ рд╡рд░реНрдЧ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЙрджреНрджреЗрд╢реНрдп рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ new/deleteред [рдЧрдирдереЛрд░рде] рдЗрд╕ рддрд░рд╣ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рдЧреНрд░рдиреНрдерд╕реВрдЪреА


[рдЧреБрдиреНрдерд░реЛрде]
рдЧреБрдВрдЯрд░реЛрде, рдХрд░реНрдЯред C ++ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рдиред рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рджреНрдз рддрд░реАрдХреЗ ред: рдкреНрд░рддрд┐ред рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ - рдПрд╕рдкреАрдмреАред: рдЕрд▓реНрдлрд╛-рдмреБрдХ рдПрд▓рдПрд▓рд╕реА, 2017.
[
рдореЗрдпрд░реНрд╕ 1] рдореЗрдпрд░реНрд╕, рд╕реНрдХреЙрдЯред C ++ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдЙрдкрдпреЛрдЧред 55 рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХреЗ ред: рдкреНрд░рддрд┐ред рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ - рдПрдо .: рдбреАрдПрдордХреЗ рдкреНрд░реЗрд╕, 2014ред

All Articles