如何 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>>
可以正常工作:返回函数局部值将移动它,而不是复制它(或者仅当移动不可用时)。
我有一个工厂方法可以创建一堆对象和 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>>
可以正常工作:返回函数局部值将移动它,而不是复制它(或者仅当移动不可用时)。