この場合の話なんですけどね。

namespace std
{
  template < class T > class allocator;
  template < class T, class Allocator > class vector;
};

class Hoge
{
private:
  std::vector* m_pArray;
};

メンバ変数にvector保持する時、ポインタにして前方宣言すれば#include <vector>をヘッダに書かなくて住みますよね。
つまり公開せずに済む。
ところがshared_ptr系って、shared_ptrへのポインタを保持したら本末店頭なので、
結局、スマートポインタってのは公開しなくちゃならないんですよね?