【发布时间】:2011-10-20 03:47:11
【问题描述】:
这似乎是一个愚蠢的问题,但我希望能够在一行中实例化派生类并将其分配给基类:
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 块中调用 load_xml,而不是尝试将每个派生类分配给基类,然后在最后从基类调用 load_xml。
谢谢!
【问题讨论】:
-
在 VS2010 中没有警告。你用的是哪个编译器?
-
我认为您所说或想的大部分内容都没有道理。你能退一步说一下你需要解决什么问题吗?你的意思是说
A * p = new B();? -
@phillip gcc 4.5.2 是我正在使用的编译器
标签: c++ polymorphism