質問です

class Hoge{
};

typedef boost::shared_ptr<Hoge*> pHoge;

class Mage : public Hoge{
vector<pHoge> array;
public:
Mage(){
pHoge o = this;
array.push_back( o );

for( int i = 0; i < 3; i++ ){
pHoge buf( new Hoge );
array.push_back( buf );
}
}

~Mage(){
array.clear();
}
}

このように派生元(Hoge)のポインタと
新規に追加する(Hoge)との混合の array を生成すると
array.clear()時に失敗してしまいます

これを解決する方法があれば教えてください