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

use*_*112 5 c++ polymorphism pointers memory-management virtual-functions

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

考虑到以上几点,我将如何编写一个返回多态类型的函数?我将使用哪种返回机制/类型?

jua*_*nza 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()}; 
}
Run Code Online (Sandbox Code Playgroud)

请注意,C ++ 14具有std::make_unique,您可以执行上述操作而不必new直接调用。见相关问题