朵拉大学毕业,因学业优秀,得以进入华为公司工作。显然,这意味着朵拉离开原大学,成为华为公司的一员。如果把朵拉(dora)视为一个对象,同时把华为(huawei)视为一个容器,下述代码表征了dora对象加入huawei容器的行为:
1 | huawei.push_back(dora); |
遗憾的是,上述代码的实际执行结果并不符合预期。按照本书19.2节的讨论,容器通过拷贝复制行为制造了一个dora的复制品,真正加入华为的是dora的复制品,而不是本尊。原有对象dora依然存在于内存中。
C++提供了移动拷贝构造函数以及移动赋值函数,它们可以把一个预期不再被需要的对象的资源,如string对象的缓冲区,直接移入另一个对象,从而避免不必要的对象复制行为,进而提高程序运行的效率。