![](https://habrastorage.org/getpro/habr/post_images/219/bcf/5dd/219bcf5dd9e8530b561f0d8f7de7f7be.jpg)
手の代わりにハサミがあれば、これはそれほど悪くありません。 エドワードには多くの才能があります。たとえば、驚くほど犬を切ることができます!
C ++カンファレンスに参加した後、よく似た考えを覚えます。今回はGoing Native 2013の後です。昨年は、新しい標準C ++ 11についての熱意と興奮がありました。 今年は、現実のチェックでした。 誤解しないでください:素晴らしい犬のヘアスタイルがたくさんありました(シンプルでエレガントなC ++コードを意味します)が、会議の主な部分は、怪我を防ぎ、偶発的な切断の場合に応急処置を提供する方法についてでした。
小さなホラーショップ。
C ++を使用しない方法について多くの議論があったため、次のような考えに至りました。これは、無能なプログラマーの問題に関するものではなく、C ++を使用することは一般的に間違っています。 ですから、もしあなたが言語の基本を学んでいるだけで、それを使おうとするなら、あなたは運命にあります。
C ++には、下位互換性、特にCとの互換性という言い訳があります。C++のサブセットとしてCを扱うことができます。C++は、実際のアセンブラ言語であり、日常のプログラミングでは、明らかに必要です。 盲目的にC ++に没頭している場合、純粋なポインター、 forループを考えていることになります。これはすべて、本当に愚かな仕事です。
これを行わない方法のよく知られた例は、 mallocを使用してメモリを動的に割り当て、メモリを解放することです。 mallocはバイト数を取得してvoidへのポインターを返します。これをより便利なものにキャストする必要があります。メモリ管理用のより悪いAPIを考えるのは困難です。 以下は、本当に悪い(ただし、nullポインターでアクセスできない場合はほぼ正しい)コードの例です。
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 - .
:
- 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.
- C++ Report in September 1998 and February 1999 (auto_ptr ).
- C++ in Action (still auto_ptr), Addison Wesley 2001. , .
- Walking Down Memory Lane, with Andrei Alexandrescu, CUJ October 2005 ( unique_ptr)
- unique_ptr–How Unique is it?, WordPress, 2009