将对象传递给参数时了解堆栈
Understanding stack when passing object to param
我是C++的新手,正在尝试理解一些堆栈问题。
在下面的代码中,list
是在堆栈中创建的,对吗?因此,每个字符串项都存储在堆栈位置(其地址)。现在,当我在QStringListModel(const QStringList &strings, ...)
的引用参数中传递list
时,列表不会被复制,而是只传递了一个引用(addr),对吗?所以它仍然在方法的相同堆栈范围内?如果列表真的存在于堆栈中,那么当它的作用域结束时,它是如何不被销毁的?如果它仍然存在,那么一旦我在模型内向列表中添加新项目,堆栈会增长/收缩吗?
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
// ...
QStringList list;
list << "aaa" << "bbb" << "ccc";
QStringListModel *model = new QStringListModel(list, this);
// ...
}
是的,list
在MainWindow
构造函数返回之前一直有效。QStringListModel
没有接收到该列表的副本也是正确的。
QStringListModel
只能在构造函数调用中检查列表,如果它想保留一些信息,就必须制作自己的副本。
编译器不保证也不强制执行这一点,但这是常见的做法。存储引用或完全拥有对象所有权的函数应该始终记录下来,这正是因为您刚刚找到的原因。
相关文章:
- 正在尝试了解输入验证循环
- 了解 GLM- openGL 中的相机转换
- C++我需要了解在哪里使用指针和双指针
- 如何深入了解明显的腐败
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 了解嵌套循环打印星号图案
- 为什么调用堆栈数组会导致内存泄漏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 了解每月第一天函数的代码
- 堆栈和队列是否像C++中的数组一样传递?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 了解使用堆栈实现队列的递归调用机制
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- 了解堆栈,堆和内存管理
- 将对象传递给参数时了解堆栈
- 了解调用堆栈