我正在尝试减少主要用 C++ 开发的应用程序的内存占用,而我正在研究的一件事是通过引用返回一个特别大的数据结构,而不是按值返回它们。我需要一些确认。例如,假设我在一个类some_object
中有如下成员函数:
const some_type& get_some_type(...) {
...;
return ...;
}
对比
const some_type get_some_type(...) {
...;
return ...;
}
我的理解是否正确,通过调用后者(按值返回)进行分配会some_type
在应用程序执行期间的某些点在内存中留下两个数据副本,而调用前者(按引用返回)可以避免这种情况?
作为减少内存占用的总体目标的一部分,另一项努力是以some_type
排除使用上述按引用返回选项的方式更改定义的方式。在这种情况下,因为some_type
(它实际上是一个容器,比如说,类型数据的容器data_type
)在循环中使用,如下所示:
const some_type& = some_object->get_some_type(); // returns by ref. a large container
for(...) {
...;
data_type = some_type.at(...);
...;
}
我假设如果我们被限制使用上面的按值返回,那么我需要通过引入一个新函数来按值获取容器的元素来进行如下更改get_some_type_at
(这样做有什么缺点我应该是知道,比如说,在性能方面?):
for(...) {
...;
data_type = some_object->get_some_type_at(...); // returns by value a small object
...;
}
同样,我主要是在寻找对这些方面的确认。但细节和见解是最受赞赏的。感谢您的时间和兴趣!