boost::flyweight

トップページ > メモリ管理 >

abstract

必要なヘッダ
<boost/flyweight.hpp>
出来ること
Flyweightパターン
リファレンス
en

sample

サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]

#include <iostream>
#include <string>
#include <boost/flyweight.hpp>
using namespace std;

int main()
{
	boost::flyweight<string> s( "foo" );
	boost::flyweight<string> t( "foo" );
	boost::flyweight<string> u( s.get() + t.get() );
	boost::flyweight<string> v( "foofoo" );

	cout << &s.get() << endl;
	cout << &t.get() << endl;
	cout << &u.get() << endl;
	cout << &v.get() << endl;
}

出力結果

0x8e17c8
0x8e17c8
0x8e1800
0x8e1800

同じfooという文字列のstringオブジェクトは共有され、 foofooというstringオブジェクト同士も共有されています。

etc

Flyweight パターン のライブラリ実装です。リソース消費の大きいオブジェクトを使用するときに、 等価なインスタンスを使う場所では、同じインスタンスを共有することでリソース消費を押さえるというものです。

flyweight<T> 型は、const T& に近い形で使用できます(暗黙の変換あり。 get()メンバで明示的にも取り出せる)。その一方で、コンストラクタでflyweightオブジェクトを作るときには、 等価なインスタンスが既に存在すればそちらを自動的に共有してくれます。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0