簡體   English   中英

存儲收藏的最佳實踐方法

[英]Best practice way to store collection

我正在將C#應用程序移植到C ++,並且具有以下類(其中Box是一個結構,而BoxStore將是該應用程序中的一個長期存在的全局對象):

public class BoxStore
{
    private List<Box> boxes;

    ...

    public List<Box> GetBoxes()
    {
        return this.boxes;
    }
}

我打算將box集合存儲在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對象釋放集合。)

返回原始指針或引用之間有明顯區別嗎?

這可能是您正在尋找的可能。 BoxStore確實擁有這些對象。 因此,不需要指針等。 我假設單個盒子對象和列表不會超過商店。 如果有此要求,則可能需要考慮使用指針。

關於按引用返回不是一個好的設計,因為它違反了封裝 因此,如果您沒有允許客戶端修改列表的約束,那么我將提供一份列表副本。

#include <list>

class Box
{
...
};

class BoxStore
{
private :
    std::list<Box> boxes;

public :
    std::list<Box>& GetBoxes()
    {
        return boxes;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM