Skip to Content
C++语言导学(原书第2版)
book

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

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
Pearson
Content preview from C++语言导学(原书第2版)

5.2.2 移动容器

我们可以通过定义拷贝构造函数和拷贝赋值运算符来控制拷贝,但是对于大型容器来说拷贝的代价可能太高。当使用引用向函数传递对象时,可避免拷贝的代价,但我们不能返回局部对象的引用作为结果(在调用者有机会查看一下返回的局部对象之前,它就已经被销毁了)。考虑下面代码:

为了从运算符+返回结果,要将结果从局部变量res拷贝出来,拷贝到调用者可以访问的地方。我们可能这样使用+:

这就需要拷贝Vector对象至少两次(每次使用运算符+都要拷贝一次)。如果Vector很大,比方说含有10000个double,那么这种拷贝就会让人头疼不已了。最不合理的地方是operator+()中的res在拷贝后就不再使用了。事实上我们并不想要一个副本——我们只想把计算结果从函数中取出来——我们想要的是移动(move)一个Vector,而不是拷贝(copy)它。幸运的是,我们可以表达这一意图:

基于上述定义,编译器将选择移动构造函数(move constructor)来实现将返回值从函数中传输出来的任务。这意味着r=x+y+z不需要再拷贝Vector,而只是移动它。 ...

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.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

软件开发实践:项目驱动式的Java开发指南

软件开发实践:项目驱动式的Java开发指南

Raoul-Gabriel Urma, Richard Warburton
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Python机器学习案例精解

Python机器学习案例精解

Posts & Telecom Press, Yuxi (Hayden) Liu

Publisher Resources

ISBN: 9787111633280