6

据我了解,要传递/返回多态对象,您需要使用指针或引用类型来防止切片问题。但是,要从函数返回对象,您不能在堆栈上创建并返回引用,因为本地对象将不再存在。如果您在堆上创建并返回引用/指针 - 调用者必须管理内存 - 不好。

考虑到上述情况,我将如何编写一个返回多态类型的函数?我会使用什么返回机制/类型?

4

1 回答 1

8

您将返回一个负责内存管理并明确所有权的智能指针:

#include <memory>

struct IFoo
{
  virtual ~IFoo() {}
};
struct Foo1 : IFoo {};
struct Foo2 : IFoo {};

std::unique_ptr<IFoo> make_foo()
{ 
  return std::unique_ptr<IFoo>{new Foo1()}; 
}

请注意,C++14 具有std::make_unique,它允许您执行上述操作而无需new直接调用。请参阅相关问题

于 2013-07-07T14:44:47.733 回答