这似乎是一个愚蠢的问题,但我希望能够实例化一个派生类,它在同一行分配给基类:C++派生类分配给一个基类更好的办法
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
我试图在不使用新运算符的情况下获得多态行为。我认为编译器正在为构造函数的返回值插入一个临时引用。是否可以指示编译器确实要将该地址用于分配?
*编辑
这里有一个小范围内。我有这样的事情解析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块中调用load_xml,而不是尝试将每个派生类分配给基类,然后从基类调用load_xml。
谢谢!
在VS2010中没有警告。你正在使用哪种编译器? –
我想大部分你说的或者你想要的东西都没有意义。你能退一步说出你需要解决什么问题吗?你的意思是说'A * p = new B();'? –
@phillip gcc 4.5.2是我正在使用的编译器 – JaySilk84