当我用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 ++语言保证?
答案 0 :(得分:6)
这里,当指令完成执行时,临时对象超出范围。也就是说,就在C的构造函数返回之后。
是的,这是由C ++标准保证的。