http://www.boost.org/libs/smart_ptr/sp_techniques.html
shared_ptr<X> func () { // nantoka, kantoka shared_ptr<X> p = new X; return p; }
shared_ptr<X> p = func();
typedef shared_ptr<class X> XPtr; typedef shared_ptr<class Y> YPtr; class X { YPtr y; } class Y { XPtr x; }
typedef weak_ptr<class parent> pRef; typedef shared_ptr<class parent> pPtr; typedef shared_ptr<class child> cPtr; class parent { vector<cPtr> children; pRef parent; } class child { pRef parent; }
if ( pPtr pp = child::parent.lock() ) { if ( pPtr ppp = pp.parent.lock() ) { } }
child::parent->parent
void func (void* data);
thread( boost::function<void ()>(boost::bind(&fogeClass::fogeFunc, fogeClass1, l, m, n)) )