我在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?
..有些人说它会无效,但有人说字符串(在他们的例子中)会被复制到局部变量。这真令人困惑。
答案 0 :(得分:2)
如果我理解你在问什么,你会担心,因为QStringList &strings
是通过引用传递的吗?
初始化列表调用stringList(const &QStringList)
拷贝构造函数。此复制构造函数将传递的&QStringList
对象的状态复制到新对象,并将该对象分配给stringList
这样,即使原始&strings
超出范围或以其他方式销毁,它也会赢无关紧要,因为stringList
指向不同的对象。
在第二个链接中没有调用复制构造函数...成员对象被指定为指向传递给它的同一对象。如果传递的对象稍后在程序中被销毁,则成员对象仍将指向该被销毁的对象,使其无效。