Jak rozumiem tymczasowe, poniższy kod powinien działać, ale tak nie jest.C++ temporary - "czysta wirtualna metoda o nazwie"
struct base
{
virtual~base() {}
virtual void virt()const=0;
};
struct derived:public base
{
virtual void virt()const {}
};
const base& foo() {return derived();}
int main()
{
foo().virt();
return 0;
}
Wywołanie funkcji virt() daje "czystą funkcję wirtualną o nazwie" błąd. Dlaczego tak jest i co powinienem zrobić?
dokładnie, ponieważ wirtualna tabela również zostanie oczyszczona ... stąd komunikat. –
@DougT .: Nie ma "ponieważ" w "nieokreślonym zachowaniu". (Poza tym wirtualne tabele * nigdy nie zostaną "wyczyszczone".) –
Ale czy tymczasowy obiekt nie powinien zostać zniszczony na końcu pełnego wyrażenia, to znaczy po powrocie virt()? – Dave