我正在专门处理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