C ++返回类型用于生成多态对象的函数?

时间:2013-07-07 14:42:50

标签: c++ pointers memory-management polymorphism virtual-functions

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

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

1 个答案:

答案 0 :(得分:5)

您将返回一个智能指针,负责内存管理并清除所有权:

#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的情况下执行上述操作。请参阅related question