c++ - 从对象中获取项目集合的最佳实践?

标签 c++ oop

我专门处理 C++,但这确实与语言无关。

只是为了给问题提供一些上下文......我有一个基于树/图的结构,其中每个节点都包含多个项目的集合。

我有一个封装了一些通用集合(列表、映射、 vector 、LinkedList 等)的类。我希望能够以尽可能最有效的方式从该集合中获取所有项目,而客户端无法编辑私有(private)集合。

这是我所拥有的一个简化示例:

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 相同...

无论如何,还有其他方法可以解决这个问题吗?让我知道你们的想法...谢谢。

最佳答案

Iterator pattern通常被认为是将元素列表从不可知的集合公开到集合的实际内部表示的适当方法。您可以以返回只读 (const) 引用的方式创建迭代器,或者在请求时即时复制项目,而不是复制整个列表。

关于c++ - 从对象中获取项目集合的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1220265/

相关文章:

c++ - 如何在成员函数线程中调用回调?

c# - 在 Asp.net 中,如何将子类呈现给 html 帮助程序?

javascript - 如何在 Node.js 中正确构建类

c++ - 使用 bazel 和 emscripten 构建 Web 程序集

c++ - 如何在qt,opencv中依次显示目录中的所有图像

c++ - 在 C++ 中的混合对象列表中使用相同的方法

php - 如何使用 $this 访问静态类成员?

java - 工厂模式和依赖关系

c++ - 链接器找不到 -lglut

c++ - QObjects 移入 QThreads 后信号不再工作