我正在專門處理C++,但這實際上是與語言無關的。從對象中獲取項目集合的最佳實踐?
只是爲了給問題一些上下文......我有一個基於樹/圖的結構,其中每個節點擁有多個項目的集合。我有一個封裝了一些泛型集合(列表,地圖,矢量,LinkedList,無論)的類。我希望能夠以最有效的方式從該集合中獲取所有項目,而無需客戶端能夠編輯私有集合。
這裏是什麼,我有一個簡單的例子:
class MyClass
{
public:
// Basic constructors and such
void AddItem(int item) { _myItems->push_back(item); }
private:
list<int>* _myItems;
};
所以,很顯然這檢索指針_myItems不起作用,因爲這將允許客戶端編輯_myItems一個getter。
嘗試1:
我可以創建一個新的列表,並返回一個指向一個不是......不過我不喜歡這個想法,創建和刪除現在說謊與不同對象的責任。
嘗試2:
我想這將是最好創建一些CopyTo從方法,如:
void CopyItemsToList(list<int>* inList) { // copy the items to client list }
這樣,客戶端負責MEM管理的,很容易擴展這允許更多的數據結構。我的這種做法值得關注的是成本......這個列表可能會非常大,而且複製項目的成本能得到大
嘗試3:
而不是保持一個指針在類的列表,只需使用一個值類型並返回(讓複製構造函數處理它)。但是,這似乎性能成本將與#2相同...
反正,有什麼其他的方式去解決這個問題?讓我知道你們在想什麼......謝謝。
const_terator然後,所以客戶端不能修改元素本身,如果這是要求。 – Eugene 2009-08-03 00:32:52
正確;更新的答案是更清楚一點。 – Amber 2009-08-03 00:34:04