下面是两个auot_ptr的实现。第一个版本文档化了类的接口并在类的定义体外面实现了所有的成员函数。第二个版本将所有的成员函数都实现在定义体内了。
在风格上,第二个实现不如第一个,因为它没有将类的接口从实现中分离出来。但是auto_ptr只是一个简单的类,所以第二个实现比第一个清晰得多。
这是把auto_ptr的接口和实现分开的版本:
下面是将所有函数定义在类定义体内的auto_ptr模板。如你所见,它容易看懂:
如果你所用的编译器还不支持“explicit”,可以安全地用#define取消它的存在:
#define explicit
这不会造成auto_ptr的任何功能减弱,但导致轻微的安全性减弱。详见Item M5。