如何 return 指针向量(和所有权)C++11

How to return vector of pointers (and ownership) C++11

我有一个工厂方法可以创建一堆对象和 returns 指向它们的指针。对象的所有权转移给调用者:

std::vector<animal*> create_zoo();

这可行,但容易出现内存泄漏。

auto zoo = create_zoo();

矢量在堆栈上并会自动清理,但包含的对象不会。

return编辑了各种子类型的对象。返回值而不是指针是行不通的。

我正在考虑使用

std::vector<std::unique_ptr<animal> > create_zoo();

unique_ptr 没有复制语义,我 return 按值 vector,理论上创建一个副本。

我可以将 vector 放在堆上以避免

std::unique_ptr<std::vector<std::unique_ptr<animal> > > create_zoo();

但这越来越荒谬了。

这也应该有效:

std::vector<std::shared_ptr<animal> > create_zoo();

这可行,但它并没有真正转移所有权。调用者必须假设可能有其他指向对象的指针。

我乐于接受建议。不需要 std::vector。我只是在寻找一种使用现代 C++ 实现 return 拥有多个对象的工厂的好方法。我暂时避免使用 boost。我正在尝试探索新的 c++11 内容。

std::vector<std::unique_ptr<animal>> 可以正常工作:返回函数局部值将移动它,而不是复制它(或者仅当移动不可用时)。