C++ shared_ptr array type access
我正在为SQL数据库制作一个包装器,我返回的对象是shared_ptr。我想支持数组类型访问(即row["column"]而不是row->get("column"))。shared_ptr存储的对象支持数组类型访问,但当然shared_ptr不支持。我应该如何处理shared_ptrs,我需要延长课程吗?
- @波布菲什:我好像记得接线员[]一定是个笨蛋…
- 是的,我只是把它当作第一个想法。现在我测试了它,发现它不起作用,我删除了这个建议。
- (*行)["列"]
- @ IgorR。我想这是最简单的方法,但我希望避免间接的。哦,好吧。
- @用户1520427除了技术问题,我不认为这是个好主意。毕竟,共享指针是一个指针,阅读代码的人应该清楚这一点。(顺便说一句,注意还有共享数组。)
- 好的,我可以省去一些麻烦,用间接的方式。谢谢。
- @ IgorR。这应该是一个答案。它简单明了,表达意图清晰。
最明显的是在shared_ptr中添加一个operator[]。这意味着定义您自己的共享指针重用std::shared指针,并让[]操作符按您想要的方式工作。
这可以通过派生共享的指针(注意:共享指针不是多态对象,所以不要在同一个上下文中混合std::和您的指针,这样您就可以重用它们的接口)快速而肮脏地完成。
如果您是一个"如果析构函数不是虚拟的就不要派生"风扇,那么您可以将std::shared_ptr嵌入到yourptr中,并重写yourptr中的shared_ptr接口,授权您必须保留的功能。
- 我本来希望避免重写接口,但把它看作析构函数并不是虚拟的,我想我没有太多选择。出于好奇,您知道std lib函数为什么不是虚拟的吗?这是表演吗?
- 因为它们不是用于"多态性"的。问题是,OOP的粉丝们认为DerivationM只适用于OOP。但这是他们的错,不是谁的错。请参阅stackoverflow.com/a/10478845/924727或stackoverflow.com/a/11202368/924727
- 很好的回复,谢谢你的链接。