当我运行以下代码时,出现以下运行时崩溃:
“称为虚拟方法的纯虚拟方法,在没有活动异常的情况下终止”
我不明白为什么多态在这里不起作用。请有人帮我。
struct Base
{
virtual void print()=0;
virtual ~Base(){}
};
struct Derived: public Base
{
void print(){cout << "this is Derived\n";}
};
struct Foo
{
Foo(Base&& r): bref{r} {}
void print(){
bref.print();
}
Base& bref;
};
int main()
{
Foo f{Derived()};
f.print(); //it crashes here with above message
}
临时对象的生存期Derived()
一直延长到完整表达式为为止Foo f{Derived()};
。f.bref
在那之后是一个悬而未决的参考。具有不确定行为的f.print()
呼叫bref.print()
。
Foo{Derived()}.print();
从技术上讲,它是很好定义的,但是将左值引用存储到传递给构造函数的右值引用对象中可能没有任何意义。