c ++将派生类分配给基类的更好方法

Jay*_*k84 5 c++ polymorphism

这似乎是一个愚蠢的问题,但我希望能够实例化派生类并将其分配到一行中的基类:

class A { };
class B : public A { };

// i can do this
A *base;
B derived;
base = &derived;

// i'd like to do something like this
A *base;
base = &B(); // produces a warning: taking address of temporary
Run Code Online (Sandbox Code Playgroud)

我试图在不使用new运算符的情况下获得多态行为.我认为编译器正在插入构造函数的返回值的临时引用.是否有可能指示编译器我实际上想要使用该地址进行分配?

*编辑

这是一个小背景.解析xml文件时我有类似的东西:

class element { virtual void load_xml(...); };
class city : public element { ... };
class state : public element { ... };

element *base;
// read some xml

if (xml_node == "city") {
  base = &city(); 
} else if (xml_node == "state") {
  base = &state();
} 

base.load_xml(...);
Run Code Online (Sandbox Code Playgroud)

我们的想法是每个派生节点都知道如何自我保湿,并将覆盖load_xml()函数来实现这一点.我想我真正应该做的是在每个if块中调用load_xml而不是尝试将每个派生类分配给base,然后在底部调用load_xml.

谢谢!

K-b*_*llo 4

我希望能够实例化派生类并将其分配给一行中的基类

在单行内实例化的对象(不使用 new 运算符)将仅持续到对其求值的表达式结束为止。因此,当您获得地址时,临时地址已不复存在。

我试图在不使用 new 运算符的情况下获得多态行为。

为此,您需要一个命名变量来为您的对象提供有效的生命周期。