0

このことを考慮:

void l(Event const& e)
{
    KeyEvent& k = (KeyEvent&)e;
    std::cout<<k.action<<" "<<k.keyCode;
}

void k(Event const& e)
{
    KeyEvent& k = (KeyEvent&)e;
    std::cout<<k.action<<" "<<k.keyCode;
}

void t(Event const& e)
{
    l(e);
    k(e);
}

int main(int argc, char* argv[])
{
    t(KeyEvent(1,1));
}

KeyEventオブジェクトはいつメモリから解放されますか(スコープが終了した後ですか、それとも削除する必要がありますか)?そして、そのKeyEventが実際にそれよりもはるかに多く渡された場合、それを使用する最後の関数が終了するまで、それが有効であり続けることを確信できますか?

4

1 に答える 1

4

KeyEventオブジェクトはいつメモリから解放されますか(スコープが終了した後ですか、それとも削除する必要がありますか)?

;ステートメントのセミコロンである完全な式が終了するまで、メモリ内に存在します。

t(KeyEvent(1,1));
                ^ end of the full-expression

ちなみに、constここで(問題を回避するために)次のことを行う必要があります。

KeyEvent const& k = (KeyEvent const&)e; //added const on both side
于 2012-04-28T03:42:41.200 に答える