常规做法是构造函数(析构函数)为private,然后static方法提供实例。
缺点是实例只能堆上处理,不能栈上初始化。
而另一种方法,利用模板传入type,然后作为友元。但是兼容性不太好。详见面试书,P257