据我了解,要传递/返回多态对象,您需要使用指针或引用类型来防止切片问题。但是,要从函数返回对象,您无法在堆栈上创建并返回引用,因为本地对象将不再存在。如果你在堆上创建并返回引用/指针 - 调用者必须管理内存 - 不好。
考虑到上述情况,我如何编写一个返回多态类型的函数?我会使用什么返回机制/类型?
答案 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。