zoukankan      html  css  js  c++  java
  • 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的部分搞明白了再说。

  • 相关阅读:
    js-添加删除记录-修改
    js-添加删除记录-添加
    js-添加删除记录-删除
    dom增删改
    事件的冒泡
    div随鼠标在浏览器的窗口任意移动
    多选框全选练习
    python-day3
    python-day2
    python-day1
  • 原文地址:https://www.cnblogs.com/lzh2nix/p/3091866.html
Copyright © 2011-2022 走看看