こんな感じ?

class A {
public:
 static boost::shared_ptr<A> create() { return boost::shared_ptr<A>(new A, deleter()); };
private:
 ~A() {};
 struct deleter { void operator()(A* value) { delete value; }; };
 friend deleter;
};