我有一個工廠方法,可以創建一堆對象並返回指向它們的指針。對象的所有權轉移給來電者:如何返回指針(和所有權)的向量C++ 11
std::vector<animal*> create_zoo();
這可行,但容易發生內存泄漏。
auto zoo = create_zoo();
該向量位於堆棧上並自動清除,包含的對象不是。
返回各種子類型的對象。 Returing值而不是指針不會。
我想用
std::vector<std::unique_ptr<animal> > create_zoo();
但unique_ptr
沒有拷貝語義和我的價值,這從理論上講,創建一個副本返回vector
。
我可以把vector
堆上,以避免
std::unique_ptr<std::vector<std::unique_ptr<animal> > > create_zoo();
但這越來越荒謬。
這應該工作太:
std::vector<std::shared_ptr<animal> > create_zoo();
這會工作,但它並沒有真正轉移所有權。調用者必須假定可能有其他指向對象的指針。
我願意接受建議。並不需要是std::vector
。我只是在尋找一種實現工廠的好方法,該工廠使用現代C++來返回幾個對象的所有權。我現在正在避免提振。我試圖探索新的C++ 11的東西。
您還可以重新考慮是否需要將動物對象分配爲指針。 'std :: vector'也可以用於你的目的。移動操作後,動物物體將被分配矢量並隨其移動。 –