私は一時ファイルについて理解しているので、次のコードはうまくいくはずですが、そうではありません。C++ temporary - "純粋仮想メソッド"と呼ばれる
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;
}
virt()を呼び出すと、「純粋仮想関数が呼び出されました」というエラーが返されます。それはなぜですか、私は何をすべきですか?
仮想テーブルも同様にクリーンアップされるため、正確にはメッセージです。 –
@DougT .:「未定義の動作」に「理由がありません」はありません。 (それ以外は、仮想テーブル*は決して "クリーンアップ"されません) –
virt()が返された後に、完全表現の終わりに一時オブジェクトが破棄されるべきではありませんか? – Dave