使用qList引用的构造函数,它是如何工作的?

时间:2012-02-16 00:42:07

标签: c++ qt

我在qt中创建了一个模型并遇到了这段代码:

class StringListModel : public QAbstractListModel
{
     Q_OBJECT

public:
    StringListModel(const QStringList &strings, QObject *parent = 0)
    : QAbstractListModel(parent), stringList(strings) {}

    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    QVariant data(const QModelIndex &index, int role) const;
    QVariant headerData(int section, Qt::Orientation orientation,
                     int role = Qt::DisplayRole) const;

private:
   QStringList stringList;
};

现在我想知道,这有用吗?如果将qstringlist传递给此函数,该函数已定位到堆栈,并且它超出了作用域,那么此对象是否会松散其stringlist?

同时阅读: C++ reference in constructor 和: Constructors accepting string reference. Bad idea?

..有些人说它会无效,但有人说字符串(在他们的例子中)会被复制到局部变量。这真令人困惑。

1 个答案:

答案 0 :(得分:2)

如果我理解你在问什么,你会担心,因为QStringList &strings是通过引用传递的吗?

初始化列表调用stringList(const &QStringList)拷贝构造函数。此复制构造函数将传递的&QStringList对象的状态复制到新对象,并将该对象分配给stringList这样,即使原始&strings超出范围或以其他方式销毁,它也会赢无关紧要,因为stringList指向不同的对象。

在第二个链接中没有调用复制构造函数...成员对象被指定为指向传递给它的同一对象。如果传递的对象稍后在程序中被销毁,则成员对象仍将指向该被销毁的对象,使其无效。