【发布时间】:2013-06-22 21:26:36
【问题描述】:
我正在尝试减少主要使用 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
...;
}
我再次主要是在寻找对这些方面的确认。但细节和见解是最受赞赏的。感谢您的时间和兴趣!
【问题讨论】:
标签: c++ function return-by-reference return-by-value