« 文献「Boost C++をチューンアップする最先端ライブラリ」 【1】 | トップページ | VC++2008のRegex »

2008年11月26日 (水)

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 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

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

トラックバック


この記事へのトラックバック一覧です: VC++2008のスマートポインタ:

« 文献「Boost C++をチューンアップする最先端ライブラリ」 【1】 | トップページ | VC++2008のRegex »