这似乎是一个愚蠢的问题,但我希望能够在一行中实例化派生类并将其分配给基类:
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
我试图在不使用 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(...);
这个想法是每个派生节点都知道如何水化自己,并将覆盖 load_xml() 函数来这样做。我想我真正应该做的是在每个 if block 中调用 load_xml,而不是尝试将每个派生类分配给基类,然后在最后从基类调用 load_xml。
谢谢!
最佳答案
I want to be able to instantiate a derived class and assign it to a base class in one line
在单行中实例化的对象(不使用 new 运算符)只会持续到对其求值的表达式结束。因此,当您获得地址时,临时地址已不存在。
I'm trying to get polymorphic behavior without using the new operator.
为此,您需要一个命名变量来为您的对象提供有效的生命周期。
关于c++将派生类分配给基类的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7830918/