A.hpp
class A {};

UseA.hpp
#inlcude "A.hpp"
class UseA { A m_obj; };

main.cpp
#include "UseA.h"

とするとmain.cppでA.hppまでインクルードされてしまい、回避するにはUseA.hppにて
class A;
UseA { A* m_p; }
とするくらいしか思いつかないのですが、もっと単純な方法ってありますか?

具体的には、main.cppからはclass Aのインスタンスが作成できないようにしたい、ということです。