我正在专门处理C++,但这确实与语言无关.
只是为了给出问题的一些背景...我有一个基于树/图的结构,其中每个节点都包含多个项的集合.
我有一个类封装了一些通用集合(list,map,vector,LinkedList,等等).我希望能够以最有效的方式从该集合中获取所有项目,而无需客户端编辑私有集合.
这是我所拥有的简化示例:
class MyClass
{
public:
// Basic constructors and such
void AddItem(int item) { _myItems->push_back(item); }
private:
list<int>* _myItems;
};
Run Code Online (Sandbox Code Playgroud)
显然,检索指向_myItems的指针的getter不起作用,因为这将允许客户端编辑_myItems.
尝试1:
我可以创建一个新列表并返回指向该列表的指针......但是我不喜欢这个想法,因为创建和删除的责任现在位于不同的对象中.
尝试2:
我认为最好创建一些CopyTo方法,例如:
void CopyItemsToList(list<int>* inList) { // copy the items to client list }
Run Code Online (Sandbox Code Playgroud)
这样,客户端负责mem管理,并且很容易扩展它以允许更多的数据结构.我对这种方法的关注是成本......列表可能非常大,复制项目的成本可能会很高
尝试3:
只需使用值类型并返回(让复制构造函数处理它),而不是保持指向类中列表的指针.但是,这似乎是性能成本与#2相同......
无论如何,还有其他任何方式去做吗?让我知道你们的想法......谢谢.
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |