将对象传递给param时了解堆栈

时间:2015-02-24 10:37:36

标签: c++ qt

我是C ++的新手,试图理解一些堆栈问题。

在下面的代码中,在堆栈中创建了list,对吧?因此每个字符串项都存储在堆栈位置(其地址)。现在,当我在list的引用参数中传递QStringListModel(const QStringList &strings, ...)时,不会复制列表,而只传入引用(addr),对吧?那么它仍然在该方法的相同堆栈范围内?如果list真的存在于堆栈中,它的范围完成时它是如何被销毁的?如果它仍然存在,一旦我将新项目添加到列表中,在模型内部,堆栈是否会增长/缩小?

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    // ...

    QStringList list;
    list << "aaa" << "bbb" << "ccc";
    QStringListModel *model = new QStringListModel(list, this);

    // ...
}

1 个答案:

答案 0 :(得分:1)

是的,listMainWindow构造函数返回之前有效。 QStringListModel没有收到列表副本也是正确的。

QStringListModel只能检查构造函数调用中的列表,如果要保留一些信息,则必须自己制作副本。

编译器不保证也不强制执行,但这是常见的做法。存储引用或完全取得对象所有权的函数应始终记录下来,这完全是因为您刚刚找到的原因。