据我所知,在C ++中,您可以将派生类分配给基类的指针。这需要new
运算符。我虽然也许我可以用匿名类实例化做一些类似的事情(不确定术语)。这是我尝试做的一个例子。这编译很好,但会产生运行时错误。有人可以解释一下运行时错误的原因,以及我试图做什么可能吗?
#include <iostream>
using namespace std;
class Base {
public:
Base() {}
~Base() {}
virtual void show() = 0;
};
class Derived : public Base {
public:
int num;
Derived() : num(0) {}
Derived(int num) : num(num) {}
virtual void show() { cout << num << endl; }
};
int main() {
Base* ptr;
/*
* I understand that I could do
* ptr = new Derived();
* but I was wondering if I could do something with anonymous classes
* as mentioned the following line compiles, but gives runtime error
*/
ptr = &Derived();
ptr->show();
system("pause");
}
答案 0 :(得分:1)
临时对象是临时的。它们在产生它们的声明的最后被销毁。由于你需要一个持续一段时间的对象,你必须做一些不同的事情。
(例外情况是将临时绑定到const引用;然后该对象将持续到引用范围的结尾)
答案 1 :(得分:0)
这一行:
ptr = &Derived();
您正在创建临时Derived
并将指针存储在ptr中的临时对象中。因为它是临时的,所以它会在此行之后立即销毁,并且ptr引用了一个无效的对象。只需确保对象的生命周期在所有引用中都存活:
Derived d;
ptr = &d;