gpt4 book ai didi

c++ - 复制赋值解释(C++)

转载 作者:行者123 更新时间:2023-11-30 03:26:40 25 4
gpt4 key购买 nike

下面是Vector类的复制赋值和移动赋值的代码:

//Copy assignment

Vector& Vector::operator = (const Vector& other)
{
double* p = new double[other.size];
copy(other.elem,other.elem + other.size,elem);
delete[] elem;
elem = p;
size = other.size;
return *this
}

以下是我对复制作业的理解:

double* p = new double[other.size]; 

- 意味着我们为新 vector 分配新空间

copy(other.elem,other.elem + other.size,elem);

- 我们复制 other vector 的所有元素(从第一个元素 other.elem 到最后一个元素 other.elem + other.size ) 到空间 p?

delete[] elem;

-我们释放旧空间,因为我们将用新空间替换它

elem = p;
size = other.size;
return *this

- 我们用新参数替换参数并返回它们

我的理解正确吗?

我不明白(或者至少现在我的大脑无法接受),如果我们释放旧空间,为什么可以向它分配新元素?

最佳答案

问题在于

double* p = new double[other.size];

您为新的“数组”分配内存,并使p 指向它。然后用

 copy(other.elem,other.elem + other.size,elem);

您复制到“数组”,因为目的地是elem 而不是p

应该是吧

 copy(other.elem,other.elem + other.size,p);

除非您从本书中复制错误,否则这确实应该向 Stroustrup 指出,因为我在任何版本或打印的勘误表中都找不到任何相关内容。

关于c++ - 复制赋值解释(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48129346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com