トップページ > コンテナとイテレータ >
#include <iostream>
#include <boost/ptr_container/ptr_vector.hpp>
using namespace std;
class object
{
public:
void method() { cout<<"Method"<<endl; }
~object() { cout<<"Destructed"<<endl; }
};
int main()
{
boost::ptr_vector<object> v;
v.push_back( new object );
v.push_back( new object );
v.push_back( new object );
v[0].method(); // v[0]->method じゃないよ
}
Method Destructed Destructed Destructed
ptr_vector<T> は基本的に vector<T*> みたいなもんですが、
辺りが違いです。多態したいのでvector<T>ではダメなのだけど、vector<T*> にするとdeleteの管理が面倒で、でも vector< shared_ptr<T> > は色々ややこしい…あと参照カウントのメモリ管理オーバーヘッドが痛い… という状況でptr_vectorを使うという用途が想定されています。 他にptr_listやptr_dequeやptr_setやptr_mapも勿論用意されております。
ただ、2. の機能のためか、STLのアルゴリズムが色々適用できなかったり (代替アルゴリズム関数がメソッドとして実装されてはいます)するのがちょっと残念なところ。