在以下示例中,指针p从何处获取信息?

时间:2018-07-27 23:28:15

标签: c++11

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
}

我认为std :: copy()的第三个参数应该是指针p,但是这本书(使用C ++的编程原理和实践-第二版)说:

“实现分配时,可以考虑通过在创建副本之前释放旧元素的内存来简化代码,但是通常最好不要在知道可以替换信息之前就丢弃信息。另外,如果您这样做了,如果您给它自己分配了一个向量,也会发生奇怪的事情。”-第635和636页。

因此,指针elem必须是std :: copy()的第三个参数,以免暂时使指针无效。我认为... 但是p是从哪里获得要放置在它指向的数组中的信息,从而可以做到:elem = p? 我已经知道复制和交换策略存在,您不必对此进行解释。 我想了解以上内容。

1 个答案:

答案 0 :(得分:1)

不,那是错字。

std::copy(a.elem, a.elem+a.sz, p);

是代码应读取的内容。