2012-02-16 37 views
0

進出口創造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傳遞給該函數,並且它超出了作用域,那麼這個對象是否會放棄它的字符串列表?

同時讀取: C++ reference in constructor 和: Constructors accepting string reference. Bad idea?

..其中一些人說,這將是無效的,但也有人說,該字符串(在他們的例子)將被複制到本地變量。這真是令人困惑。

回答

2

如果我明白你在問什麼,你擔心,因爲QStringList &strings通過引用傳遞?

初始化列表調用stringList(const &QStringList)複製構造函數。此複製構造函數將通過的&QStringList對象的狀態複製到新對象,並將該對象指定爲stringList。這樣,即使原始&strings超出範圍或以其他方式銷燬,由於stringList指向不同對象也無所謂。

在第二個鏈接中沒有調用複製構造函數...將成員對象指定爲指向傳遞給它的相同對象。如果傳遞的對象在程序中稍後被銷燬,則成員對象仍將指向該被銷燬的對象,從而使其無效。

+0

等什麼?我可以看到:myclass(const std :: string&_name):name(_name){} 和StringListModel(const QStringList&strings,QObject * parent = 0) :QAbstractListModel(parent),stringList(strings){} 你能解釋一下嗎? – chikuba 2012-02-16 01:44:46

+1

我想他的意思是說「你的第二個環節」,而不是第一個。如果你正在存儲一個給定的QStringList的引用,而不僅僅是使用被複制到你的成員變量中的引用,那麼你的示例只會有問題。 – Chris 2012-02-16 03:28:27

+0

@Chris好的。我的意思是第二環節。 – 2012-02-16 05:39:48

相關問題