有一个函数,需要返回一个比较大的对象。为了避免堆栈溢出,打算在函数中,在堆上产生这个对象,用智能指针shared_ptr指向对象。然后在函数返回的时候,返回这个对象的引用,而不是返回这个对象本身。这样就可以避免占用大量堆栈内存了。在外层函数中,对这个对象取值,然后就抛弃了。
之所以不返回指向对象的智能指针,是因为外层函数中,要取得对象本身,还要对指针解引。这样,外面使用这个对象的表达式看起来不好理解。
我网上搜索过,一般函数返回引用的情况,大都是对象在函数外生成,并作为引用输入参数传递给函数。没发现把函数内,堆上产生对象的引用直接返回的情况。虽然我觉得这种情况应该也是合理的。
我有几个问题:这么做是否合理?有没有更好的办法?还有,堆上分配的内存会不会在外层函数退出时自动释放?
请不吝赐教。先谢谢。