我移植一个C#应用程序到C++,我有下面的类(其中Box是一个结构,而BoxStore将在应用一个全球性的,长期的生活目标):最佳实践的方式来存储收集
public class BoxStore
{
private List<Box> boxes;
...
public List<Box> GetBoxes()
{
return this.boxes;
}
}
我打算将这些盒子集合存储在C++的std :: vector中。有多种方法来定义集合:
std::vector<Box> boxes;
shared_ptr<std::vector<Box>> boxes;
std::vector<Box>& boxes;
(*std::vector<Box> boxes;)
什么是 - 如果有的话 - 最好的方式去?我想最后一个选项(存储指向集合的原始指针)是没有任何好处的最差解决方案(因此也是缺口))。
什么是移植GetBoxes方法的最佳方法?当然,这取决于存储集合的方式。我在这里可以看到多种方法太:
(std::vector<Box> GetBoxes();)
std::shared_ptr<std::vector<Box>> GetBoxes();
*std::vector<Box> GetBoxes();
std::vector<Box>& GetBoxes();
第一个解决方案似乎是不正确的,因为载体将在返回时被复制,因此调用者不能修改原始集合。
但是其他三种方法对我来说似乎同样好。 BoxStore实例是长期居住的,并且在应用程序运行时不会被破坏,因此调用者不会拥有集合的所有权。这是否意味着返回一个shared_ptr在语义上是不正确的? (它始终是BoxStore对象,释放集合。)
并且返回一个原始指针或引用之间有显着差异吗?
你的两种可能的方式不是。他们甚至不编译。 – 2012-07-17 13:16:29
存储集合(选项1),返回参考(选项4)。如果商店拥有“矢量”,则不应该使用指针。当然,您需要将&符号移动到正确的位置进行编译。 – dasblinkenlight 2012-07-17 13:17:23
感谢您的更正,在发布之前还没有编译过代码。 – 2012-07-17 13:34:05