zoukankan      html  css  js  c++  java
  • 读书笔记_Effective_C++_条款二十五: 考虑写出一个不抛出异常的swap函数

    在之前的理论上调用对象的operator=是这样做的

        void swap(A& x)
        {
            std::swap(a, x.a);
        }
        A& operator=(const A& a)
        {
            A temp = a;
            swap(temp);
            return *this;
        }

    上面的代码看起来有点麻烦,但它是一个好办法。

    我们可以在std里面特化我们的swap

    class A
    {
    private:
        int a;
    public:
        void swap(A& x)//防止写成friend,我们给他一个接口
        {
            std::swap(a, x.a);
        }
        A(int x) :a(x){}
        A& operator=(const A& a)
        {
            A temp = a;
            using std::swap;
            swap(*this,temp);
            return *this;
        }
        void display()
        {
            cout << a << endl;
        }
    };
    
    namespace std
    {
    //    template<>书上加了,但我发现并不能
        void swap<A>(A &s1, A &s2)//这个<A>是特化,和重载分道扬镳
        {
            s1.swap(s2);
        }
    }
    
    int main()
    {
        A a(1);
        A b(2);
        b.display();
        b = a;
        b.display();
    }

    当class也是template以后再说

  • 相关阅读:

    守护线程
    下载图片
    多线程
    self的作用
    设置项目地址环境
    对象 类
    ValueError: urls must start with a leading slash
    mock挡板接口开发
    K&R——第五章 指针与数组
  • 原文地址:https://www.cnblogs.com/vhyc/p/5598973.html
Copyright © 2011-2022 走看看