本地对象是否保证比临时参数更长久? (C ++ 11)

时间:2016-07-12 16:44:43

标签: c++ c++11 object-lifetime

如果我有一个函数将对象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?换句话说,参数是否保证比局部变量更长?

1 个答案:

答案 0 :(得分:7)

  

是保证在临时参数之前销毁的局部变量Foo local_foo吗?

是的,保证以相反的构造顺序销毁具有自动存储持续时间(即本地人)的对象。函数参数始终在块作用域内的本地之前构造(以未指定的顺序)。见Object Destruction in C++

[class.temporary/5]

  

5: ...此外,对临时引用的临时性的破坏   应考虑到破坏物体的顺序   静态,线程或自动存储持续时间([basic.stc.static],   [basic.stc.thread],[basic.stc.auto]);也就是说,如果obj1是一个对象   具有与临时和创建之前相同的存储持续时间   临时创建临时应在obj1之前销毁   破坏;如果obj2是具有相同存储持续时间的对象   临时和创建临时后创建的临时   在obj2被摧毁后销毁。 ...