c ++中的const参数生命周期

时间:2012-04-28 03:38:04

标签: c++ reference const

考虑一下:

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实际上传递的远不止于此,我可以确定它会保持有效,直到使用它的最后一个函数结束?

1 个答案:

答案 0 :(得分:4)

  

KeyEvent对象何时从内存中释放(是在作用域结束后还是必须删除它)?

它存在于内存中直到full-expression的结尾,即语句的分号;

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

顺便说一句,你应const在这里(以避免问题):

KeyEvent const& k = (KeyEvent const&)e; //added const on both side