August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
有一种常用的返回大量信息的技术:将信息放在自由存储空间中,然后返回指向它的指针。但这种技术也是高复杂性的来源以及内存管理错误的主要来源:对于从函数返回的指向自由存储空间的指针,谁delete它?当发生异常时,我们能否确保指向自由空间中对象的指针被正确delete?除非我们采用了系统的指针管理(或使用unique_ptr和shared_ptr这样的“智能”指针),否则答案可能是“好的,我认为是这样的”。而这并不足够好。
幸运的是,当我们向vector添加移动操作时,就解决了vector的上述问题:使用移动构造函数将元素的所有权从函数移出。例如:
make_vec()的这个(最终)版本最为简单,也是我推荐的版本。移动方法可推广到所有容器以及所有其他资源句柄。例如,fstream使用这种技术跟踪文件句柄。移动方法既简单又通用。使用资源句柄简化了代码并消除了主要错误来源。与直接使用指针的方案相比,没有任何运行时开销,即使有的话,也非常小且容易预测。