Skip to Content
C++程序设计:原理与实践(基础篇)(原书第2版)
book

C++程序设计:原理与实践(基础篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(基础篇)(原书第2版)

13.3.4 移动

如果一个vector有很多元素,那么拷贝的代价会很高。因此,我们只应在必要时才拷贝vector。考虑下面这个例子:

在本例中,我们从输入流读取数据存入res,然后将它返回给use()。将res从fill()拷贝出来并拷贝到vec中,代价可能很高。但为什么要拷贝呢?我们不需要拷贝!在从函数返回后,我们不可能再使用原对象了(res)。实际上,res会被销毁,这是fill()返回过程的一部分。那么我们如何避免拷贝呢?让我们再次考察一个向量在内存中的表示:

我们希望能“偷出”res的表示用于vec。换句话说,我们希望vec指向res的元素,而不进行任何拷贝。

在将res的元素指针和元素数量移动到vec后,vec就持有了元素,我们就成功地完成了将res中的元素值移出fill()并移到vec中的工作。现在,res可以被(简单且高效地)销毁,没有任何不良副作用:

我们成功地将100000个double移出fill()并移到它的调用者中,而代价仅仅是四个机器字的赋值。

我们如何用C++代码表达这种移动?我们可以定义移动操作,作为拷贝操作的补充: ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111562252