BoostML - make_shared and custom deleter
BoostやC++0xにはmake_shared/allocate_sharedという、shared_ptrを生成するためのヘルパ関数があります。
template<class T, class... Args> shared_ptr<T> make_shared(Args&&... args); template<class T, class A, class... Args> shared_ptr<T> allocate_shared(const A& a, Args&&... args);
shared_ptr<person> p = make_shared<person>(24, "Akira");
これはとても便利なのですが(newすら書かせないスマートポインタ!)
Custom Deleterを指定できないという問題があります。
// shared_ptrのコンストラクタならCustom Deleterを指定できるが shared_ptr<person> p(new person(24, "Akira"), [](person* x) { x->disp(); delete x; }); // make_sharedだと指定できない shared_ptr<person> p = make_shared(24, "Akira", ??);
今のところ、Custom Deleterが必要な場合には、これらのヘルパ関数は使用できないようです。
(Custom Deleterを管理するアロケータを作ればできるけど)