在这一节里,首先给出了一个很大众版的swap函数:
namespace std { template<typename T> void swap(T& a, T& b) { T temp(a); a = b; b = temp; } }
然后在为了效率的考虑而引出了一种叫做pimpl的手法。其实在<C程序设计语言>5.6节讲指针数组时就提高了一种类似的方法,不过其中讲的是关于交换字符串指针的。
恩,从而有了以一下的代码:
class Widget { public: Widget(const Widget& rhs); Widget& operator=(const Widget& rhs) { *pimpl = *(rhs.pimpl); //这里复制的事Widgetimpl对象 return *this; } void swap(Widget& rhs) { using std::swap; swap(pimpl, rhs.pimpl); } private: Widgetimpl *pimpl; }; namespace std{ template<> void swap<Widget>(Widget& a, Widget& b) { a.swap(b); }
就这一条来说我觉得在当下的环境下写到这部分就可以了。模板,特化,偏特化,命名空间查找规则,这些相对来说的话已经属于C++的另外一个模块了,暂时就不写了,自己也没有十足把握能写清楚。等把C++中面向对象部分的C的部分搞明白了再说。