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
?
我已经知道复制和交换策略存在,您不必对此进行解释。
我想了解以上内容。
答案 0 :(得分:1)
不,那是错字。
std::copy(a.elem, a.elem+a.sz, p);
是代码应读取的内容。