【发布时间】:2009-08-03 00:23:29
【问题描述】:
我专门处理 C++,但这真的与语言无关。
只是为问题提供一些背景信息...我有一个基于树/图的结构,其中每个节点都包含多个项目的集合。
我有一个类,它封装了一些通用集合(列表、地图、向量、LinkedList 等等)。我希望能够以最有效的方式从该集合中获取所有项目,而无需客户端能够编辑私有集合。
这是我所拥有的一个简化示例:
class MyClass
{
public:
// Basic constructors and such
void AddItem(int item) { _myItems->push_back(item); }
private:
list<int>* _myItems;
};
很明显,获取指向 _myItems 的指针的 getter 不起作用,因为这将允许客户端编辑 _myItems。
尝试 1:
我可以创建一个新列表并返回一个指向该列表的指针......但是我不喜欢这个想法,因为现在创建和删除的责任在于不同的对象。
尝试 2:
我认为最好创建一些 CopyTo 方法,例如:
void CopyItemsToList(list<int>* inList) { // copy the items to client list }
这样,客户端负责内存管理,并且很容易扩展它以允许更多数据结构。我对这种方法的担忧是成本......列表可能非常大,复制项目的成本可能会变得很大
尝试 3:
不要在类中保留指向列表的指针,只需使用值类型并返回它(让复制构造函数处理它)。但是,这似乎性能成本将与#2 相同......
无论如何,还有其他方法可以解决这个问题吗?让我知道你们的想法...谢谢。
【问题讨论】: