以下のコードでは、実行がからB
に戻ったときに、クラスのデストラクタがケース1で呼び出されますが、ケース2では呼び出されません。で作成されたときに両方がヒープメモリ上にあるため、この違いはわかりません。説明してもらえますか?main
fn()
A
new
class B {
public:
B() {
printf(" [B] COntsructor");
}
~B() {
printf(" [B] Destructor");
}
};
class A {
public:
A() {
printf(" [A] COntsructor");
}
~A() {
printf(" [A] Destructor");
}
B Query() { return b; } /// Case 1
B* Query() { return &b; } /// Case 2
B b;
};
void fn()
{
A *a = new A();
B b = a->Query(); // case 1
B* b = a->Query(); // case 2
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
fn();
return 0;
}