复制赋值和复制构造函数(代码C ++中的差异)

时间:2018-01-04 16:56:32

标签: c++

我是C ++的新手,我不懂C ++中的一些语法复制赋值和复制构造函数:

复制构造函数:

vector::vector(const vector& arg)
// allocate elements, then initialize them by copying
    :sz{arg.sz}, elem{new double[arg.sz]}
{
    copy(arg,arg+sz,elem);    // std::copy(); see §B.5.2
}

Link to original image

复制分配:

class vector {
    int sz;
    double* elem;
public:
    vector& operator=(const vector&);    // copy assignment
    //...
};

vector& vector::operator=(const vector& a)
    // make this vector a copy of a
{
    double* p = new double[a.sz];       // allocate new space
    copy(a.elem,a.elem+a.sz,elem);      // copy elements
    delete[] elem;                      // deallocate old space
    elem = p;                           // now we can reset elem
    sz = a.sz;
    return *this;                       // return a self-reference (see §17.10)
}

Link to original image

我不明白的是:

为什么在复制构造函数中我们复制像这样的元素:

copy(arg,arg + sz,elem),但是在这样的副本分配中:copy(a.elem,a.elem + a.sz,elem)

你能解释一下这个区别吗?

1 个答案:

答案 0 :(得分:0)

不同之处在于参数的名称和传递给std:: copy的类型。

std:: copy是模板化函数;因此它改变了参数的类型(double,int,string,...)

您需要担心的是参数说明(来自http://en.cppreference.com/w/cpp/algorithm/copy

template< class InputIt, class OutputIt >
OutputIt copy( InputIt first, InputIt last, OutputIt d_first );
  • first,last - 要复制的元素范围

  • d_first - 目标范围的开头。