VC++2008のスマートポインタ
Visual C++の最近のバージョンでは「標準 C++ ライブラリ TR1 拡張」としてshared_ptrなどのスマートポインタが使える。
このスマートポインタはBoostから取り入れられたものらしいので、「Boost C++をチューンアップする最先端ライブラリ」(ビョルン・カールソン(著) 村上雅章(訳) ピアソン・エデュケーション)のサンプルプログラムのいくつかをVC++付属のライブラリを使ってコンパイル&実行してみた。以下は気がついた点のメモ。
使用したVC++は「Visual C++ 2008 Express Edition SP1」
[1] Boostを使うソースとVC++付属のライブラリを使うソースの互換性を維持するため、ヘッダファイルのインクルード部分と、使用する名前空間の設定部分をコンパイラのバージョンによって切り替えるようにした。
#if defined(_MSC_VER) && (_MSC_VER >= 1500) // VC++2008以降
#include <memory>
#else
#include "boost/shared_ptr.hpp"
#endif
#if defined(_MSC_VER) && (_MSC_VER >= 1500) // VC++2008以降
using namespace std::tr1;
#else
using namespace boost;
#endif
実際のスマートポインタの使用法は同じになる。
shared_ptr<A> p(new A());
[2] boost::scoped_ptrは取り込まれていないが、なぜだろうか。shared_ptrがあれば十分と考えられたのだろうか。
[3] 上の文献のP20,P22,P25,P42にあるサンプルプログラムを実行してBoostによる場合と同じ動作をすることを確認した。(互換性テストにはならないでしょうが...)
[4] スマートポインタとは関係ないが、VC++2008ではassert.hを明示的にインクルードしないと、assert( )関数がコンパイルエラーになる。
« 文献「Boost C++をチューンアップする最先端ライブラリ」 【1】 | トップページ | VC++2008のRegex »
「パソコン・インターネット」カテゴリの記事
- トップページにTooltip (jQueryを使ったオリジナル)(2008.12.20)
- JAVAのハッシュテーブル HashMap(2008.12.15)
- C#のハッシュテーブル Dictionary(2008.12.15)
- C++/C#/JAVA コレクション比較 【ハッシュテーブルの比較概要】(2008.12.12)
- C++/C#/JAVA コレクション比較 【インデックスによる要素アクセス】(2008.12.10)
« 文献「Boost C++をチューンアップする最先端ライブラリ」 【1】 | トップページ | VC++2008のRegex »
コメント