如何在程序中动态初始化对象而不在c ++中继承? 例如我有A类和B类。并且依赖条件我需要创建对象的实例但我不确切知道我需要创建什么对象,它取决于用户输入的信息;
示例代码:
int i;
cin>>i>>endl;
void *obj;
if(i)
obj = new A();
else
obj = new B();
答案 0 :(得分:1)
如果您没有获取指针的限制,则取两个类的两个指针并根据输入初始化一个。
int i;
A *a_ptr;
B *b_ptr;
cin>>i>>endl;
if(i)
a_ptr = new A();
else
b_ptr = new B();
答案 1 :(得分:1)
您可以根据需要使用std::any或std::variant。
投射指向void*
的指针(大多数情况下)是一个坏主意,因为你丢失了对象的类型,你必须处理原始指针。这意味着您必须管理资源,调用正确的析构函数... any
和variant
为您执行此操作。
我建议使用variant
而不是any
,除非您特别需要any
,因为variant
可让您更好地控制类型:您的价值可以有只有有限的类型列表。