valgrindでプログラムを調べてたら怒られて気づいたんだが、
shared_ptr<T>(new T[n])のようにshared_ptrで配列を持つと消すときにdelete pが呼ばれるので問題である。
new T[n]でつくった配列はdelete[] pで消さないといけない。
boostにはshared_arrayというものがあるらしいが、そういうのはtr1の下にないので、
こんなdeleterをつくって回避した。
template <typename T> struct array_deleter { void operator()(T* p) const { delete[] p; } }; void f() { shared_ptr<int> p (new int[999], array_deleter<int>()); }