2012-04-22 85 views
1

我讀過C++中的默認行爲總是複製。所以我猜測數據庫上的獲取函數也會返回數據庫的副本。獲取和設置在c + + multimap

通常,這工作正常,但在這種情況下,我的數據成員之一,是多重映射。這是我現在所擁有的:

class Track { 
private: 
    multimap<long, Note> noteList; 
public: 

    multimap<long ,Note> getNoteList() 
    { 
     return noteList; 
    } 
} 

但由於某種原因,這是行不通的。當我打電話給getNoteList()時,我沒有收到任何錯誤,但是我的程序在控制檯中的輸出停止了(當我運行我的應用程序時)。如果我使noteList公共一切正常。

是否有正規的類型如int,char和float之間的差額相比,Multimap之?任何理由爲什麼這不起作用手如何編寫一個工作的getter函數?

回答

2

返回一個容器的副本可能不是一個好主意。你很可能最終會因爲空無一物而過度複製。如果您不希望用戶能夠更改現有容器,則應參考const返回。

class Track { 
private: 
    multimap<long, Note> noteList; 
public: 

    multimap<long ,Note> const& getNoteList() const 
    { 
     return noteList; 
    } 
} 

現在,當這個類的客戶端調用getNodeList()是可以直接訪問地圖noteList,而不需要做昂貴的拷貝。

如果你也想給客戶端直接修改地圖的功能,你可以添加返回普通的引用過載:

multimap<long ,Note>& getNoteList() 
    { 
     return noteList; 
    } 

不過,如果你達到這一點你應該問自己,爲什麼你不是直接暴露noteList

+0

訪問器通常總是一個好主意。在這種情況下,noteList是成本/只讀的。 – 2012-04-23 16:07:02