2017-06-22 126 views
2
list_sorter add(std::list<typeOfList> &list){ 
    list_num++; 
    lp.insert(lp.end(), list.begin(), list.end()); 
    lp.sort(); 
    list.clear(); 
    std::cout << list_num << std::endl; 
    return *this;} 

的方法我有一個類模板這個小方法,主要我這樣稱呼它:調用一個方法C++

si.add(lc).add(lb); 

兩個時候也得到執行,這COUTS增加list_num,但在第二次add()後它不會被保存。這是爲什麼?

+0

變化從'list_sort'到'list_sort&' – Amadeus

+0

在調試器步驟通過返回類型,看什麼'this'是。作爲一個說明,這種風格與'X()。Y()Z()'被稱爲 「鏈接」。 – tadman

回答

2

add按值返回,這意味着它會返回一個新的臨時list_sorter複製自*this,並且臨時與原始對象無關。

你可以改變它返回按引用。即

list_sorter& add(std::list<typeOfList> &list){ 
    list_num++; 
    lp.insert(lp.end(), list.begin(), list.end()); 
    lp.sort(); 
    list.clear(); 
    std::cout << list_num << std::endl; 
    return *this; 
} 
+0

謝謝!那很容易。我應該已經知道了,我是新來的C++,它需要時間來習慣引用/指針。 – Shaq

0
list_sorter add(std::list<typeOfList> &list) { 
    ... 
    return *this; 
} 

由於該函數返回一個值,而不是一個參考,它修改對象,然後返回所述對象的副本。隨後的調用發生在副本上。之後,該副本被銷燬,因爲您從未將其分配給變量。

解決辦法是:

​​
+0

謝謝!引用/指針總是欺騙我。下次我會更加小心。 – Shaq