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

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/

10-12 17:28
查看更多