我有一个工厂方法,该方法创建一堆对象并返回指向它们的指针。对象的所有权转移给调用者:
std::vector<animal*> create_zoo();
这可行,但容易出现内存泄漏。
auto zoo = create_zoo();
vector 在堆栈上,并且会自动清除,而包含的对象则不会。
返回各种子类型的对象。取代值而不是指针是无效的。
我在想用
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<std::unique_ptr<animal>>
可以正常工作:返回局部函数值将对其进行移动,而不是对其进行复制(或仅在不可用移动的情况下)。
关于c++ - 如何返回指针 vector (和所有权)C++ 11,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39102028/