C++设计容器和管理列表返回
我正在开发一个类,它充当另一个类的容器。在容器类中,我必须实现一个方法来获取集合中的所有元素。我的容器类使用 std::deque。
我应该返回对双端队列的引用吗? 我应该返回双端队列的副本吗? (我的上帝告诉我这不是答案......:)) 我应该返回一个数组吗? ... 在这种情况下,最佳实践是什么? 谢谢
I am developing a class which acts as a container for another class. In the container class I must implement a method to get all elements in the collection. My container class uses a std::deque.
Should I return a reference to the deque?
Should I return a copy of the deque? (my god tell me this is not the answer... :) )
Should I return an array?
...
What's the best practice in this context?
Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
恕我直言,最佳实践是使用 迭代器设计模式 并返回迭代器
就您的特定示例而言担心我会做这样的事情:
The best practice IMHO is to use the iterator design pattern and return iterators
As far as your particular example is concerned I would do something like this:
只需包装
begin()
、end()
、size()
和operator[]
即可美好的。Simply wrap
begin()
,end()
,size()
andoperator[]
and you'll be fine.迭代器模式很好,但是您正在暴露您的实现细节。它可能会被滥用并破坏你的班级内部结构。这些对于 API 来说都是坏事,您应该设计针对这种情况的保护措施。
这听起来很浪费,但最安全的方法是将集合的副本作为 std::vector 返回。
The iterator pattern is nice but you are exposing your implementation details. It can be abused and break your class internals. These are all bad things for an API and you should design protection against this.
It sounds wasteful but the safest way is to return a copy of your collection as a std::vector.