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