рд╕реА ++ рдореЗрдВ рдЬреАрд╕реА: рдкреНрд░рд▓реЛрднрди рдкрд░ рдХрд╛рдмреВ рдкрд╛рдиреЗ

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

рд╡рд┐рдзрд┐ рдХрд╛ рд╕рд╛рд░ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИ: рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджрд╛рдпрд░реЗ рдХрд╛ рдПрдХ рдЪрд░ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг ("рд╕реНрдЯреИрдХ") рд╕рджрд╕реНрдп рд╣реИ, рддрдм рднреА рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдХ рдЕрдЦрдВрдб рдЕрдкрд╡рд╛рдж рд╕реЗ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд╣реА рд╕рдлрд╛рдИ рд╣рдореЗрд╢рд╛ рд╣реЛрдЧреАред рдХрд╛рд░реНрдп рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИред

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

рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд░рдЦрдХрд░, рдПрдХ рдЕрдЦрдВрдб рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрд╛рдж рднреА, рд╕рд╣реА рд╕реНрдЯреНрд░рд┐рдкрд┐рдВрдЧ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
class SomeParent { Child1 child1; Child2 child2; }; class Root { public: void Run(); private: SomeParent entry; }; int main(int argc, char **argv, char **envp) { Root().Run(); //   ,    } 
рдмреЗрд╢рдХ, рдпрд╣ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдорд╛рдорд▓рд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╢реАрд▓рддрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рддрдм рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

2. рдХрдВрдЯреЗрдирд░ рдХрд╛ рдорд╛рд▓рд┐рдХред
рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдСрдЯреЛ-рд╕рдлрд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХрдВрдЯреЗрдирд░ рдХреЛ рдЦреБрдж рдХреЛ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг, "рд╕реНрдЯреИрдХреНрдб" рд╕рджрд╕реНрдп рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░ рд╡рд┐рдХрд▓реНрдк рдпрд╛ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдХрдВрдЯреЗрдирд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
 template <T> class One { public: One(); //  One(T *); //    void Clear(); //   T *operator->(); //   T *GetPtr(); ~One(); // }; //--- : class Owner { One<Entity> dynamicEntity; }; 
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИред

3. рдмрдХрд╛рдпрд╛ рд╕рд░рдгрд┐рдпрд╛рдБред
рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдорд╛рдирджрдВрдб рд╕реЗ рдПрдХрдЬреБрдЯ рд╣реЛрдХрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдореЗрдВ, рдпрд╣ рдЕрдкрдиреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЬрдм рд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╕реНрддреБ рд╕рд░рдгреА рдХреА рд╕рдВрдкрддреНрддрд┐ рдмрди рдЬрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдореЗрдВ рднреА рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 template <T> class Array { public: T & Add(); T & Add(const T &); // T & Add(T *); //   ~Array(); //   }; //   - : template <K,T> class ArrayMap { public: T & Add(const K &); T & Add(const K &, const T &); // T & Add(const K &, T *); //   ~ArrayMap(); //   }; //--- : class Owner { Array<String> stringsArray; ArrayMap<int,String> anotherStringsCollection; }; 
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдорд╛рд▓рд┐рдХ рдПрдХ рдРрд╕рд╛ рд╕рд░рдгреА рд╣реИ рдЬреЛ рдорд╛рд▓рд┐рдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп, "рд╕реНрдЯреИрдХреНрдб" рд╕рджрд╕реНрдп рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рд╕реЗ, рдЖрдк рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдореЙрдбрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХрдард┐рдирд╛рдИ рдХрд╛ рдЕрдЧрд▓рд╛ рд╕реНрддрд░ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рдмреАрдЪ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╣реИ:

4. рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдгред
рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХрд╛ рдареАрдХ рдПрдХ рдорд╛рд▓рд┐рдХ рд╣реЛрддрд╛ рд╣реИред рдорд╛рд▓рд┐рдХ рд╡рд╕реНрддреБ рдХреЛ рджреВрд╕рд░реЗ рдорд╛рд▓рд┐рдХ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рд╡рд╕реНрддреБ рддрдХ рдкрд╣реБрдВрдЪ рдЦреЛ рджреЗрддрд╛ рд╣реИред
рдЖрдк рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдкреЙрдЗрдВрдЯрд░ рдХреА рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЬреЛрдбрд╝рдХрд░ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 template <T> class One { public: //... One(const One<T> &source); //ptr = source.ptr; source.ptr = NULL; void operator=(const One<T> &source); //ptr = source.ptr; source.ptr = NULL; bool IsEmpty(); //,     private: mutable T *ptr; }; //      

рдирддреАрдЬрддрди, рдпрджрд┐ рдорд╛рд▓рд┐рдХ рдЕрдкрдиреЗ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рд╕рд░рдгреА рдпрд╛ рдХрдВрдЯреЗрдирд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рдЗрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреЛ рдХреЙрд▓рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирдпрд╛ рдорд╛рд▓рд┐рдХ рдмрди рдЧрдпрд╛ рд╣реИред рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рдореЗрдореЛрд░реА рд▓реАрдХ рдмрдирдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдл рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред

рдореИрдВ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╣рдо рдирд┐рдпрдо рдХрд╛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХрд╛ рдареАрдХ рдПрдХ рдорд╛рд▓рд┐рдХ рд╣реИред
рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА рдорд╛рд▓рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ "рдЖрдЙрдЯ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдпрд╛ рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ (рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рджрд╕реНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ) рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕рдХрд╛ рдорд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реИ:
 class CleverEntity { public: void UpdateUI(Window *window) // ,     , //        { //window->... //: delete window     //     } }; class WindowWorker { public: void UpdateUI() { entity.UpdateUI(window.GetPtr()); } private: CleverEntity entity; One<Window> window; }; 


рд╡рд╣ рд╕рдм рд╣реИред
рд╢рд╛рдпрдж "рд╕рд┐рд▓реНрд╡рд░ рдмреБрд▓реЗрдЯ" рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рджреГрд╢реНрдп, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХреБрдЫ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдкрд╣рд▓реБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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


All Articles