рдПрдбрд╡рд░реНрдб рд╣реИрдВрдбреНрд╕ - C ++

рдореИрдВ рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдирд┐рд░реНрджреЗрд╢рдХ рдЯрд┐рдо рдмрд░реНрдЯрди рдХреА рдПрдХ 1990 рдХреА рдлрд┐рд▓реНрдо рдпрд╛рдж рдЖрдИ - "рдПрдбрд╡рд░реНрдб рд╕реНрдХреИрд╢рд╣реИрдВрдб"

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

рдЫреЛрдЯреА рд╕реА рдбрд░рд╛рд╡рдиреА рджреБрдХрд╛рдиред

C ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдиреА рдЪрд░реНрдЪрд╛ рд╣реБрдИ рдХрд┐ рдЗрд╕рдиреЗ рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░ рддрдХ рдкрд╣реБрдБрдЪрд╛рдпрд╛: рдпрд╣ рдЕрдХреНрд╖рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд╕ C ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдо рддреМрд░ рдкрд░ рдЧрд▓рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рднрд╛рд╖рд╛ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реАрдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд░реНрдмрд╛рдж рд╣реИрдВред
C ++ рдореЗрдВ рдПрдХ рдмрд╣рд╛рдирд╛ рд╣реИ: рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛, рд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ред рдЖрдк C рдХреЛ C ++ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрд╕реЗрдВрдмрд▓рд░ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЬрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХред рдпрджрд┐ рдЖрдк C ++ рдореЗрдВ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдбреВрдмреЗ рд╣реБрдП рд╣реИрдВ, рддреЛ рдЖрдк рд╢реБрджреНрдз рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, рдХреЗ рд▓рд┐рдП - рд▓реВрдк - рдпрд╣ рд╕рдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмреЗрд╡рдХреВрдл рдЙрдкрдХреНрд░рдо рд╣реИред
рдРрд╕рд╛ рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдореЙрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрд▓реЙрдХ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╢реВрдиреНрдп рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдореЗрдореЛрд░реА рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд░рд╛рдм рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦрд░рд╛рдм рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ (рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ рд╕рд╣реА рд╣реИ, рдпрджрд┐ рдПрдХ рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ) рдХреЛрдб:
struct Pod {
int count;
int * counters;
};
int n = 10;
Pod * pod = (Pod *) malloc (sizeof Pod);
pod->count = n
pod->counters = (int *) malloc (n * sizeof(int));
...
free (pod->counters);
free (pod);

, ++ , , , .
++ ┬л┬╗ malloc free new delete. ++ :
struct Pod {
int count;
int * counters;
};
int n = 10;
Pod * pod = new Pod;
pod->count = n;
pod->counters = new int [n];
...
delete [] pod->counters;
delete pod;

, , new , . , new ( ? : n?). , - :
class Snd { // Sophisticated New Data (  POD)
public:
Snd (int n) : _count(n), _counters(new int [n]) {}
~Snd () { delete [] _counters; }
private:
int _count;
int * _counters;
};
Snd * snd = new Snd (10);
...
delete snd;

? ! .
++ , delete.
, malloc new, : , тАФ .
( ), STL- , . , value- . ! Value- - . shared_ptr shared_ptr? ! , : move- rvalue-.
( !). ? . -, . . , , . ( , , ).

++


, ++.
. , . . , ++, , , , тАФ - .
++ . тАФ , , . , . , , .
, .
, . : , ( , ) . ++, .
, 10 ┬л ┬╗ ++ ( ). , ++, . ++ : mutation, , , .
, тАФ ++ .
, ( ) .
, , , ++ 10 . " , , ++. , , .



( , ), . (. ). , , 20 . ++ . , ++.
, , , . , .
? ++ тАФ . , , : , , . , . , ++ , , , ++ . : , ( ++ ).
, , ( , shared-) . , . , shared- , . , , , , - , , , . , shared-, , , , .
shared_ptr , , . ! , ! : . ++.



8 , : ┬л !┬╗
++ . 2005 . Posix- 1995 . Windows 95, тАФ Windows NT. ++ 2011 .
++ 11 . : , , . , ++ Java ( , Java ). , ++ , . ++ , , .
C++11 , , , . , - , , . тАФ STM (Software Transactional Memory), . STM, , STM . STM , ++ .
task- future ( , deprecated- ++ 14). task- , . , . . . task- , , futures ( ), task' , , , GPU.
Microsoft PPL Intel TBB (, Microsoft AMP ).
, , , 2015 . , , ++ . ++ , , . : data race. тАФ , D.
++ , , . , . ++, , , . , - .
D, , ( ). D тАФ . D . , . : , , .
++ , - .
, - тАФ , .
: , GPU. ++. , , , . тАФ ┬лParallel and Concurrent Programming in Haskell┬╗. ++, , .



, ++ . . , GPU - .

:
  1. Bartosz Milewski, тАЬResource Management in C++,тАЭ Journal of Object Oriented Programming, March/April 1997, Vol. 10, No 1. p. 14-22. unique_ptr, auto_ptr, . auto_vector, auto_ptr.
  2. C++ Report in September 1998 and February 1999 (auto_ptr ).
  3. C++ in Action (still auto_ptr), Addison Wesley 2001. , .
  4. Walking Down Memory Lane, with Andrei Alexandrescu, CUJ October 2005 ( unique_ptr)
  5. unique_ptrтАУHow Unique is it?, WordPress, 2009


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


All Articles