我正在编写一个编码问题,为了解决这个问题,我正在创建自己的数据结构(类),“SetOfStacks”,它具有堆栈向量的成员。在SetOfStacks的一个成员函数中,我需要使用push_back()函数展开向量。为此,我在成员函数中声明一个堆栈变量(非动态),然后将该变量传递给push_back()。
代码工作正常,但我不明白为什么。我想在成员函数执行完毕后,堆栈变量将超出范围(因为它没有动态分配),因此向量将包含垃圾。我认为解决方案是使用动态分配的内存。为什么这样做?我最好的假设是push_back()按值而不是通过引用接收新堆栈,从而有效地创建它的新副本。任何帮助表示赞赏!
答案 0 :(得分:1)
当你向堆栈元素push_back()
传递元素时,元素会通过值传递给向量,而不是作为引用,所以即使在函数定义之后堆栈元素被破坏,向量也会得到价值已经。
这可以与函数到调用者的返回值相关联。即使返回值是函数堆栈的本地值(即在执行函数后它将被销毁),返回值也会在被销毁之前复制到调用函数。