QList填充构造函数但在其他函数中访问

时间:2014-09-28 12:28:39

标签: c++ qt qlist

我对这个C ++代码不太确定。

#include <QList>
#include <QString>

using namespace std;

class MyClass {
    public:
            QList<QString> m_List;

    MyClass() {
            QString text1("foo1");
            m_List << text1;

            QString text2("foo2");
            m_List << text2;
    }

};

int main() {
    MyClass myClass;
    for (int i = 0; i < myClass.m_List.size(); ++i) {
            cout << myClass.m_List.at(i).toStdString()  << endl;
    }
}

我不明白为什么它有效,因为我在构造函数的 QList 中创建并添加了 QString
所以,我的实例 text1 不应该在构造函数的末尾存在,当我在循环中访问 QList 元素时,这应该不起作用,但输出看起来不错:

foo1
foo2

cppcheck 对此代码不做任何说明 这段代码是对的吗?

2 个答案:

答案 0 :(得分:1)

您的代码是正确的。

是的,本地实例不再存在。但那没关系。 QList按值存储数据。传递给QList的内容将被复制,副本将存储在列表中。因此,即使您的本地QString对象在离开构造函数时被丢弃,QList中的副本仍然存在。

答案 1 :(得分:0)

似乎对于QString,它将值存储在数组

http://qt-project.org/doc/qt-5/qlist.html#details

  

在内部,QList表示为指向项目的指针数组   类型为T.如果T本身是指针类型或基本类型为否   大于指针,或者如果T是Qt的共享类之一,那么   QList将项直接存储在指针数组中。

另请查看:http://qt-project.org/doc/qt-5/implicit-sharing.html#list-of-classes