below code에서 A
이라는 익명의 변수를 B
의 ctor에 전달하면 해당 변수가 해당 줄 뒤에 소멸됩니다. this answer에 따르면개체, 범위, RAII의 수명 이해
임시 객체가 전체 식의 끝에 파괴 그들은의 부분입니다. 전체 표현식은 다른 표현식의 하위 표현식 이 아닌 표현식입니다. 대개이 은
; (or) for if, while, switch etc.)
으로 끝나며이 문장의 끝 부분이 임을 나타냅니다.
나는 그것을 얻을하지만이 파괴 된 후 어떻게 클래스 B
는 그 mamber_a
변수의 값을 알 수 있습니까? 나는 A
의 복사본 ctor가 불리는 것을 안다. 이것이 어떻게 가능한지?
#include <iostream>
using namespace std;
class A
{
int sign;
A();
const A & operator=(const A &);
public:
A(int x) : sign(x) {
cout << "A ctor : " << sign << endl;
}
void WriteA() const {
cout << sign << endl;
}
~A() {
cout << "A dtor : " << sign << endl;
}
A(const A &) {
cout << "A copied : " << sign << endl;
}
};
class B
{
int sign;
const A & member_a;
public:
B(const A & aa , int ww) : sign (ww) ,member_a(aa) {
cout << "B ctor : " << sign << endl;
}
void WriteB() const {
cout << "Value of member_a :";
member_a.WriteA();
}
~B() {
cout << "B dtor : " << sign << endl;
}
};
int main() {
A a(10);
B b1(a,1);
b1.WriteB();
B b2(A(20),2);
b2.WriteB();
return 0;
}
출력은 다음과 같습니다
A ctor : 10
B ctor : 1
Value of member_a :10
A ctor : 20
B ctor : 2
A dtor : 20
Value of member_a :20 // Object A was destructed. Where does this 20 come from?
B dtor : 2
B dtor : 1
A dtor : 10