Effective C++学习之考虑写一个不抛异常的swap函数

在这一节里,首先给出了一个很大众版的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的部分搞明白了再说。

原文地址:https://www.cnblogs.com/lzh2nix/p/3091866.html