рдореБрд╣рд╛рд╡рд░реЗ рдкрд┐рдореНрдкрд▓ рдФрд░ рдлрд╛рд╕реНрдЯ рдкрд┐рдВрдкрд▓ - рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ

рдЕрдиреНрдп рдирд╛рдо: рдкреБрд▓, рд╕рдВрдХрд▓рди рдлрд╝рд╛рдпрд░рд╡реЙрд▓, рд╣реИрдВрдбрд▓ / рдмреЙрдбреА

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдиреЗрдЯрд╡рд░реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ GeneralSocket class ("Visible class") рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо ("рд╣рд┐рдбрди рдХреНрд▓рд╛рд╕") рдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдЧрд╛ред рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдпрд╛ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:





рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

//GeneralSocket.h

#include тАЬUnixSocketImpl.hтАЭ



Class GeneralSocket{

public :

connect();

private :

UnixSocketImpl socket;

}



//GeneralSocket.cxx

GeneralSocket::connect(){

socket.connectImpl();

}




* This source code was highlighted with Source Code Highlighter .








рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЫрд┐рдкреЗ рд╣реБрдП UnixSocketImpl рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдЬрдирд░рд▓рд╕реЛрдХреЗрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреНрд╕рд╕реЙрдХреЗрдЯрдЖрдИрдПрдордкреАрдПрд▓ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдЕрдм рдЖрдЗрдП рджреГрд╢реНрдп рд╡рд░реНрдЧ рдХреЗ рдирд┐рдЬреА рд╕рджрд╕реНрдп рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЫрд┐рдкреЗ рд╣реБрдП рд╡рд░реНрдЧ UnixSocketImpl рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╣рдЯрд╛ рджреЗрдВ:



//GeneralSocket.h

Class UnixSocketImpl;



Class GeneralSocket

{

public :

GeneralSocket();

void connect();

private :

UnixSocketImpl * socket;

}



//GeneralSocket.cxx

#include тАЬUnixSocketImpl.hтАЭ



GeneralSocket::GeneralSocket() : socket ( new UnixSocketImpl){}



GeneralSocket::~GeneralSocket() {

delete socket;

socket = 0;

}



void GeneralSocket::connect() {

socket->connectImpl();

}




* This source code was highlighted with Source Code Highlighter .








рд╣рдо рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ UnixSocketImpl.h рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рдФрд░ рдЗрд╕реЗ рдЬрдирд░рд▓ рд╕реЙрдХреЗрдЯ рдХреНрд▓рд╛рд╕ рдХреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рд╕реЙрдХреЗрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред



C ++ рдореЗрдВ, рдХрдХреНрд╖рд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ (рдирд┐рдЬреА рд╕рджрд╕реНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рднреА) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕реА рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рджрд╕реНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ Pimpl (Pointer to Implementation - Pointer to рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рджреЛ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

  1. рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
  2. рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХреЗ рдХрдИ рд╕реНрддрд░реЛрдВ (рдХрдо рд╕реЗ рдХрдо рдПрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЖрдк рдХреНрдпрд╛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

  1. рдХреЗрд╡рд▓ рдЫрд┐рдкреЗ рд╣реБрдП рд╕рджрд╕реНрдп рдбреЗрдЯрд╛
  2. рд╕рднреА рдЫрд┐рдкреЗ рд╣реБрдП рд╕рджрд╕реНрдп рдбреЗрдЯрд╛ рдФрд░ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рдиред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдЖрднрд╛рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрдВрдж рд╡рд░реНрдЧ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓реА рдХрдХреНрд╖рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ
  3. рдирд┐рдЬреА рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рджрд╕реНрдпред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдВрд░рдХреНрд╖рд┐рдд рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  4. рдкреВрд░реА рдХреНрд▓рд╛рд╕ред рдлрд╛рдпрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реА рдУрд░, рд╣рдо рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ


рдЕрдм рдХрд╛рд░реНрдп рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдвреЗрд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдПрдХ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдЫрд┐рдкреА рд╣реБрдИ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

//GeneralSocket.h

Class GeneralSocket

{

public :

GeneralSocket();

void connect();

private :

static const size_t sizeOfImpl = 42; /* or whatever space needed*/

char socket [sizeOfImpl];

}



//GeneralSocket.cxx

#include тАЬUnixSocketImpl.hтАЭ



GeneralSocket::GeneralSocket() : {

assert(sizeOfImpl >= sizeof (UnixSocketImpl));

new (&socket[0]) UnixSocketImpl;

}



GeneralSocket::~GeneralSocket() {

(reinterpret_cast<UnixSocketImpl *> (&socket[0]))->~UnixSocketImpl();

}



GeneralSocket::connect() {

socket->connectImpl();

}




* This source code was highlighted with Source Code Highlighter .








рд╣рдо GeneralSocket рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ UnixSocketImpl рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдмрджрд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдорд┐рдпрд╛рдВ рдорд┐рд▓реАрдВ:

  1. C ++ рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЯреНрд░рд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИ
  2. рдореЗрдореЛрд░реА рд╕рдВрд░реЗрдЦрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреА рд╣реИ рдХрд┐ рдореЗрдореЛрд░реА рдХреЛ UnixSocketImpl рдХреЗ рд╕рднреА рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдкреВрд░реНрдг рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рдВрдШ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

    union max_align {

    void * dummy1;

    int dymmy2;

    }



    union {

    max_align m;

    char socket [sizeOfImpl];

    }




    * This source code was highlighted with Source Code Highlighter .






  3. UnixSocketImpl рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╣реИрдВрдбрд▓рд┐рдВрдЧред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рдХреЙрдкреА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛
  4. рдЬрдирд░рд▓ рд╕реЙрдХреЗрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдмрди рдЧрдпрд╛ рд╣реИред рдЕрдм рдЖрдкрдХреЛ sizeOfImpl рдХрд╛ рдЖрдХрд╛рд░ рдЕрджреНрдпрддрд┐рдд рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
  5. рдЕрдХреНрд╖рдо рд╕реНрдореГрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЖрдХрд╛рд░рдСрдлрд╝рдЖрдИрдПрдордкреАрдПрд▓ = = рдЖрдХрд╛рд░ (рдпреВрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯрдЖрдИрдПрдордкреАрдПрд▓) рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рд╣реИ


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреА рд╕реНрдореГрддрд┐ рдХрд╛ рдЖрд╡рдВрдЯрди рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕реНрдореГрддрд┐ рдХреЗ рдЖрд╡рдВрдЯрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред рдЖрдЗрдП рд╣рдорд╛рд░реА рдореЗрдореЛрд░реА рдПрд▓реЛрдХреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

//GeneralSocket.h

class GSimpl;



class GeneralSocket {

private :

GSimpl * pimpl;

}



//GeneralSocket.cxx

#include тАЬUnixSocketImpl.hтАЭ



class FixedAllocator {

public :

static FixedAllocator* Instance();

void * Allocate(size_t);

void Deallocate( void *);

private :

/*Singleton implementation that allocates memory of fixed size*/

};



struct FastPimpl {



void * operator new ( size_t s) {

return FixedAllocator::Instance()->Allocate(s);

}



void operator delete( void * p) {

FixedAllocator::Instance()->Deallocate(p);

}

};



struct GSimpl : FastPimpl {

/*use UnixSocketImpl here*/

};



GeneralSocket::GeneralSocket() : pimpl ( new GSimpl){}



GeneralSocket::~GeneralSocket() {

delete pimpl;

pimpl = 0;

}




* This source code was highlighted with Source Code Highlighter .








FastPimpl рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддреЗ рд╣реБрдП рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдореЗрдореЛрд░реА рдПрд▓реЛрдХреЗрдЯрд░ (рдлрд┐рдХреНрд╕реНрдбрдЕрд▓реЛрдХреЗрдЯрд░) рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдмрдВрдж рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣рдирд╛ред рдЬрдм рдореИрдВ рдкрд┐рдВрдкрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

  1. рдЬрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрдореВрд░реНрддрди рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ
  2. рдЬрдм рдирдИ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдореВрд░реНрдд рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЛрдиреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдЕрдореВрд░реНрддрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рдкрджрд╛рдиреБрдХреНрд░рдо рдорд┐рд▓рддреЗ рд╣реИрдВ
  3. рдЬрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрджрд▓рддреЗ рд╕рдордп рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХреЛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  4. рдЬрдм рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ




рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ

  1. рд╕реНрдЯреАрдлрди рд╕реАред рджреЗрд╣рд░реНреБрд╕реНрддред "рдлрд┐рд╕рд▓рди рд╕реНрдерд╛рдиреЛрдВ рд╕реА ++ред рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдирд╛ред тАЭ(C ++ рдЧреЛрдЪреИрд╕ред рдХреЛрдбрд┐рдВрдЧ рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдирд╛)ред "рдЯрд┐рдк 8"
  2. рд╕рдЯрд░, рдЖрдВрджреНрд░реЗрдИ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗрд╕реНрдХреБ рдХреЗ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХрд╛ рдХреЛрдЯред "C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдорд╛рдирдХред" "рдЕрдзреНрдпрд╛рдп 43"
  3. рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд░рд┐рд╕реЗрдкреНрд╢рдиред рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди, рдИред рдЧрд╛рдорд╛, рдЖрд░ред рд╣реЗрд▓реНрдо, рдЖрд░ред рдЬреЙрдирд╕рди, рдЬреЗред рд╡рд┐рд▓реАрд╕рд╛рдЗрдбреНрд╕ред рдмреНрд░рд┐рдЬ рдкреИрдЯрд░реНрди
  4. рд╕рдВрдХрд▓рди рдлрд╝рд╛рдпрд░рд╡реЙрд▓ (http://gotw.ca/gotw/024.htm)
  5. рдж рдлрд╛рд╕реНрдЯ рдкрд┐рдореНрдкрд▓ рдореБрд╣рд╛рд╡рд░реЗ (http://gotw.ca/gotw/028.htm)



All Articles