如何返回指针的向量(和所有权)

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

本文关键字:向量 所有权 指针 返回 何返回      更新时间:2023-10-16

我有一个工厂方法,它创建了一堆对象并返回指向它们的指针。对象的所有权转移给调用者:

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>>将工作得很好:返回一个函数局部值将移动它,而不是复制它(或仅在不可移动时)。