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 回答