Rom*_*Coo 1 c++ virtual factory move
我建立某种工厂方法返回一个DerivedClass为BaseClass下列方式:
BaseClass Factory()
{
return DerivedClass();
}
Run Code Online (Sandbox Code Playgroud)
是的,BaseClass当我调用该方法时,将使用的move构造函数:
BaseClass object = Factory();
Run Code Online (Sandbox Code Playgroud)
由于我无法制作的move构造函数BaseClass virtual,是否有其他方法可以强制采用的move构造函数DerivedClass?
Edit1:其他信息-我已经考虑过指针。但问题是,我想将工厂函数导出到DLL中,并且希望对用户来说尽可能地容易。标准指针可能会导致内存泄漏,另一方面,并不是每个人都对智能指针熟悉。
Edit2:据我了解,真正的问题是:多态性是否也可以按值返回?
答案是否定的。
我想你不会:
BaseClass Factory()
Run Code Online (Sandbox Code Playgroud)
反而
// You'll need to delete
BaseClass* Factory() {
return new Derived();
}
// You will not need to delete
unique_ptr<BaseClass> Factory() {
// return new Derived();
// As the comments point out: prefer use of make_unique
return std::make_unique<Derived>();
}
Run Code Online (Sandbox Code Playgroud)
否则,您将切成薄片。