[C ++] рдХреНрдпрд╛ рд╣рдо рдирдП рдФрд░ рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрдЯрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВ?

рдирдорд╕реНрддреЗ! рдиреАрдЪреЗ рд╣рдо рдирдП рдФрд░ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╡реЗ рдЬреЛ рдХрд┐рддрд╛рдмреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдХрдо рд╕реЗ рдХрдо рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ)ред
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдирдИ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЖрдо рдЧрд▓рддрдлрд╣рдореА рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдХреБрдЫ рдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ рдордВрдЪреЛрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ (!!!) рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рджреЗрдЦрддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдирдП рдФрд░ рдбрд┐рд▓реАрдЯ рдХреНрдпрд╛ рд╣реИрдВ ? рдпрд╛ рд╕рд┐рд░реНрдл рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ?
рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рд╡реЗ рдЖрд▓реЛрдЪрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :))

рдиреЛрдЯ : рдиреАрдЪреЗ рд╣рдо рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЕрдиреНрдп рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рднреА рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рдХрд╛ рд╕рднреА рднреА рд╕рд╣реА рд╣реИ рдФрд░ рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдорддреМрд░ рдкрд░ рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡реЗ рдирдпрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ (рдкрд╛рда "рдЫрдд рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ", рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рддреНрдп рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ):
рдирдпрд╛ рдСрдкрд░реЗрдЯрд░ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░, C рднрд╛рд╖рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдСрдмреНрдЬреЗрдХреНрдЯ (рдУрдВ) рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рддрд╛ (рдУрдВ) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ ... рдЖрдк рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╡реЗ рдХрд╣реАрдВ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрддреЗ рд╣реИрдВ)ред

рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗ рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЖрджрд┐рдо рдЕрдзрд┐рднрд╛рд░ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ
void* operator new (std::size_t size) throw (std::bad_alloc);

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

рд▓реЗрдХрд┐рди рд╣рдо рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХреЛрдВ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рдмрджрд▓реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН рдЦрдВрдб 5.3.4 рдФрд░ 18.6.1 рддрдХ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ (рдпрд╛ рдмрд▓реНрдХрд┐ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рд╣реИ)ред
5.3.4
рдирдП-рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдкреНрд░рдХрд╛рд░-рдЖрдИрдбреА (8.1) рдпрд╛ рдирдП-рдкреНрд░рдХрд╛рд░-рдЖрдИрдбреА рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред / * рдЖрдЧреЗ рд╣рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ * /
18.6.1
рд╢реВрдиреНрдп * рдСрдкрд░реЗрдЯрд░ рдирдпрд╛ (std :: size_t size) рдлреЗрдВрдХ (std :: bad_alloc);
рдкреНрд░рднрд╛рд╡: рдЖрдХрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (5.3.4) рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрди рдлрд╝рдВрдХреНрд╢рди
рднрдВрдбрд╛рд░рдг рдЙрд╕ рдЖрдХрд╛рд░ рдХреА рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд / * рд╣рдо рдЖрдЧреЗ рд░реБрдЪрд┐ рдирд╣реАрдВ рд╣реИрдВ * / /


рдпрд╣рд╛рдВ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирдП рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдЗрд╕реЗ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдерд╛рдПрдВ рд╣реИрдВ!
рдЖрдЗрдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХреЛрдбрд╛рдВрддрд░рдХ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА ред рдЦреИрд░, рдЕрдм рдХреНрд░рдо рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

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

рдЪрд┐рддреНрд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 #include <iostream> class Foo { public: Foo() { std::cout << "Foo()" << std::endl; } }; int main () { Foo *bar = new Foo; } 


рдЗрд╕ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, "рдлреВ ()" рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдбрд╛рдВрддрд░рдХ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдореИрдВрдиреЗ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рдЯрд┐рдкреНрдкрдгреА рдХреАред
(рдХреЛрдб MSVS 2012 рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП cl рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ gcc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)
 /Foo *bar = new Foo; push 1 ;      Foo call operator new (02013D4h) ;  operator new pop ecx mov dword ptr [ebp-0E0h],eax ;  ,   new,  bar and dword ptr [ebp-4],0 cmp dword ptr [ebp-0E0h],0 ;   0    bar je main+69h (0204990h) ;  0,    (   main   - ,    ) mov ecx,dword ptr [ebp-0E0h] ;       ecx (MSVS   this  ecx(rcx)) call Foo::Foo (02011DBh) ;    ;    

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдПрдХ (рд▓рдЧрднрдЧ) рдПрдирд╛рд▓реЙрдЧ рд╣реИ рдЬреЛ рдПрдХ рдШреВрдВрдЯ рдХреА рддрд░рд╣ рдЫрджреНрдо рдХреЛрдб рдкрд░ рд╣реБрдЖ (рдпрд╛рдиреА рдЗрд╕ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВ :))
 Foo *bar = operator new (1); //  1 -   bar->Foo(); //   


рдЙрдкрд░реНрдпреБрдХреНрдд рдХреЛрдб рдКрдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рд╕рдм рдХреБрдЫ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН:
1. (рднрд╛рд╖рд╛) рдСрдкрд░реЗрдЯрд░ рдирдпрд╛ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдирдпрд╛ () рдПрдХ рд╣реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред
2. рдСрдкрд░реЗрдЯрд░ рдирдпрд╛ () рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
3. рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛрдб рдореЗрдВ рдХреБрдВрдЬреА-рд╢рдмреНрдж "рдирдпрд╛" рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реБрдП, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ (рдУрдВ) рдХреЛ рдПрдХ рдХреЙрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ

рдиреАрдЪреЗ рдкрдВрдХреНрддрд┐: рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреЛ рдирдИ-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдирдП () рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХреА рдпрд╛ рдпрд╣ рднреА рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдпрд╣ (рдпрд╣ рдЕрдВрддрд░) рдореМрдЬреВрдж рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛ред

PS рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрдЯрд░ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдбрд┐рд▓реАрдЯ () рдореЗрдВ рд╕рдорд╛рди рдЕрдВрддрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдЖрдк рд╕рдордЭ рдЧрдП рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рд╕рдордЭ рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рд▓реАрдЯ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдкрдбреЗрдЯ:
рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрддреНрд░рд╛рдЪрд╛рд░ рдореЗрдВ рдЙрдкрдирд╛рдо рдЦреАрдо рдХреЗ рд╕рд╛рде рдЦреНрд░рдЬреАрддреЗрд▓ рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд╕рд╛рд░ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
 #include <iostream> class Test { public: Test() { std::cout << "Test::Test()" << std::endl; } void* operator new (std::size_t size) throw (std::bad_alloc) { std::cout << "Test::operator new(" << size << ")" << std::endl; return ::operator new(size); } }; int main() { Test *t = new Test(); void *p = Test::operator new(100); // 100     } 

рдпрд╣ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЧрд╛
 Test::operator new(1) Test::Test() Test::operator new(100) 

рдЬрд┐рд╕рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдиреА рд╣реИред

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


All Articles