问题摘要
我不知道如何使用new-operator通过函数(而不是构造函数)创建派生类的对象,并具有指向它的基类指针。
设置
我的项目中有一个抽象基类和一个派生类:
class Base
{
// stuff
};
class Derived : public Base
{
//stuff
//constructor:
Derived(args);
};
我也有返回
Derived
对象的函数。Derived func(args);
在某个时候,我声明一个基类指针
Base* ptr = { nullptr };
我希望它稍后指向
Derived
对象。我想要的
我想使用
Derived
创建一个func
对象,并能够在以后的代码中通过指针ptr
访问它。我到目前为止做了什么
我知道使用派生类的构造函数
ptr = new Derived(args);
或简单地使用其默认构造函数(如果存在)
ptr = new Derived;
但是,我有充分的理由为什么不能在我的情况下使用构造函数,因为派生对象的配置更加复杂。在这种情况下,我想使用
func
函数创建此对象。我知道
ptr = new func(args);
不起作用,因为
new
需要一个类型。我如何实现这样的行为?在此先感谢您提供任何建议和有用的回复。
注意:我正在使用
new
,因为我还需要在其创建范围之外访问Derived
对象。
最佳答案
从func
返回一个指针可能是最好的选择,但是如果您不能修改func
,那么ptr = new Derived(func(args))
可能会起作用。这要求Derived
具有副本构造函数或move构造函数。
关于c++ - 如何使用函数(而非构造函数)将派生类对象分配给基类指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61908431/