如果我有一个函数将对象Bar
作为参数的设置,则将该对象传递给本地类Foo
,而Foo
使用Bar
它的析构函数如:
class Foo {
public:
Foo(const Bar& bar) : bar_(bar) {}
~Foo() {
bar_.DoSomething();
}
private:
const Bar& bar_;
};
void example_fn(const Bar& input_bar) {
Foo local_foo(input_bar);
// ... do stuff.
// When foo goes out of scope, its destructor is called, using input_bar.
}
如果使用临时example_fn
调用Bar input_bar
,是否保证在临时参数之前销毁局部变量Foo local_foo
?换句话说,参数是否保证比局部变量更长?
答案 0 :(得分:7)
是保证在临时参数之前销毁的局部变量
Foo local_foo
吗?
是的,保证以相反的构造顺序销毁具有自动存储持续时间(即本地人)的对象。函数参数始终在块作用域内的本地之前构造(以未指定的顺序)。见Object Destruction in C++
5: ...此外,对临时引用的临时性的破坏 应考虑到破坏物体的顺序 静态,线程或自动存储持续时间([basic.stc.static], [basic.stc.thread],[basic.stc.auto]);也就是说,如果
obj1
是一个对象 具有与临时和创建之前相同的存储持续时间 临时创建临时应在obj1
之前销毁 破坏;如果obj2
是具有相同存储持续时间的对象 临时和创建临时后创建的临时 在obj2
被摧毁后销毁。 ...