我有一个工厂方法,可以创建一堆对象并返回指向它们的指针。对象的所有权转移给来电者:如何返回指针(和所有权)的向量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'也可以用于你的目的。移动操作后,动物物体将被分配矢量并随其移动。 –