ImはQTでモデルを作成し、このコードに出くわした:qListリファレンスを持つコンストラクタはどのように動作しますか?
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を渡してスタックのlocaletedを実行し、スコープを使い果たした場合、このオブジェクトは文字列リストを失うことはありませんか?
読む両方: C++ reference in constructor と:一部の人々は、それが無効になることを言うが、いくつかは、(その例で)文字列をローカル変数にコピーされますことを言うConstructors accepting string reference. Bad idea?
..これは本当に混乱しています。
何を待っていますか? QAbstractListModel(親)、stringList(文字列){} :QAbstractListModel(親)、StringListModel(文字列) それを説明できますか? – chikuba
私は彼が最初のことではなく、 "あなたの第2のリンク"と言っていたと思います。 *あなたのメンバー変数に*コピーされた*参照を使用するだけでなく、指定されたQStringListへの参照を**保存していれば、あなたのサンプルに問題があります。 – Chris
@Chrisいいキャッチ。私は第二のリンクを意味した。 –