C ++对象以什么顺序作为参数传递给其他对象的构造函数超出了范围?

时间:2009-10-18 13:03:13

标签: c++ scope

当我用g ++编译下面的代码时,在构造类C的对象时,类A的对象似乎不会被破坏,并且当由类C的对象的构造函数访问时,B.ref_a引用不会被破坏:

#include <iostream>

struct A
{
    A(int aa)
    {
        a = aa;
    }

    ~A()
    {
        std::cout << "A out" << std::endl;
    }

    int a;
};

struct B
{
    B(const A& a)
    : ref_a(a)
    {
    }

    ~B()
    {
        std::cout << "B out" << std::endl;
    }

    const A& ref_a;
};

struct C
{
    C(const B& b)
    {
        c = b.ref_a.a + 1;
    }

    int c;
};

int main(void)
{
    C c(B(A(1)));
    std::cout << c.c << std::endl;
}

但是,它是否由C ++语言保证?

1 个答案:

答案 0 :(得分:6)

这里,当指令完成执行时,临时对象超出范围。也就是说,就在C的构造函数返回之后。

是的,这是由C ++标准保证的。