附加到具有非动态分配堆栈的向量

Appending to vector with non-dynamically allocated stack

本文关键字:动态分配 堆栈 向量      更新时间:2023-10-16

我正在研究一个编码问题,为了解决这个问题,我正在创建自己的数据结构(类(,"SetOfStacks",它的成员是堆栈向量。在 SetOfStack 的一个成员函数中,我需要使用 push_back(( 函数扩展向量。为此,我在成员函数中声明一个堆栈变量(非动态(,然后将该变量传递给 push_back((。
代码工作正常,但我不明白为什么。我认为在成员函数完成执行后,堆栈变量将超出范围(因为它不是动态分配的(,因此向量将包含垃圾。我认为解决方案是使用动态分配的内存。为什么会这样?我最好的假设是 push_back(( 按值而不是引用接收新堆栈,有效地制作了它的新副本。任何帮助不胜感激!

当您将堆栈元素push_back()向量时,该元素将按值传递给向量,而不是作为引用,因此即使在函数定义之后堆栈元素被销毁,向量也已经获得了值。

这可以与从函数到调用方的返回值相关联。即使返回值是函数堆栈的本地值(即它将在函数执行后被销毁(,返回值也会在被销毁之前复制到调用方函数。