« C++ (10) 2進行列クラス CBMatrix と単体テスト | トップページ | C++ (12) 2進ベクトルのクロス積の実装 »

2015/01/27

C++ (11) C++ の動向

先日紹介した『C++とOOPパラダイム』という本は1994年(英語版が1993年)に発行された本です。あまりにも古いので、『C++プログラミング入門 新版』(2001年発行)を入手しました。こちらはC++の基本的な機能を理解できるように詳しく書かれています。

ただこの本も結構古いです。この本を発行しているオライリー・ジャパンのサイトでC++関連の本を検索したところ、7冊発行されていて、この本が一番古いものでした。最新の本『C++クックブック』でも2006年の発行です。

英語版では『Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14』が昨年11月に発行されています。

C++ は UNIX という OS のベースになったC言語を拡張したオブジェクト指向プログラミング言語で、より機械語に近く処理は速いものの泥臭いイメージがありましたが、2000年代から新しい規格が模索されてきました。C++11 とそのマイナーチェンジである C++14 が策定され、現在 C++17 が策定中です。

この新しい C++ は Modern C++ とも呼ばれ、近年さまざまなデバイスが増えてきたこともあり、今後さらに利用者が増えるかもしれません。小さいデバイスほど C++ は威力を発揮しそうです。

Visual Studio 2013 では C++11 の機能をかなり取り込んでいます。MSDN に機能の一覧が公開されています。さらに、C++14 以降については MSDN blog (英語)に予定が掲載されています。

今作成している CBVector クラスは std::bitset というクラスとかなりの部分が重複していることが分かりました。bitset は C++11 以前からあったようです。現時点の CBVector では int の動的配列にビット情報を入れているため、この動的配列のメモリを解放するタイミングがうまくいかず、releaseMem というメソッドを作りました。

例えば (a∧b)∨c を a.and(b).or(c) と記述した場合、a.and(b) の結果が格納されているメモリは .or(c) の演算の前に解放されては困ります。JavaScript の場合、すべてのメモリは自動的に解放され、何の意識もせずにこのような記述で正常に動作していましたが、C++ ではプログラマが気をつけなければなりません。

オブジェクト指向プログラミングなので、物理的なメモリの存在はなるべく基本的なクラスの中に隠ぺいしたいところです。C++11 の shared_ptr は生のポインターとは違い参照カウンターを持っていて参照カウンターが 0 になるまでメモリが保持されます。CBVector は std::bitset と shared_ptr を組み合わせるともっと簡単になりそうです。

Modern な C++ を駆使して、より平易なプログラミングをしていきたいと思います。

|

« C++ (10) 2進行列クラス CBMatrix と単体テスト | トップページ | C++ (12) 2進ベクトルのクロス積の実装 »

私の本棚」カテゴリの記事

C++」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: C++ (11) C++ の動向:

« C++ (10) 2進行列クラス CBMatrix と単体テスト | トップページ | C++ (12) 2進ベクトルのクロス積の実装 »