下面三行被注释的代码执行顺序是否有保障?
struct S
{
S() { /* called 1st */ }
~S() { /* called 3rd */ }
};
boost::shared_ptr<S> f()
{
return boost::shared_ptr<S>(new S);
}
int second() { return 0; /* called 2nd */ }
int test()
{
return (f(), second());
}
使用我的编译器,f()
返回的 shared_ptr
似乎会一直持续到调用 second()
。但这种行为是否被标准保证并适用于其他编译器呢?