在下面的代碼中,類B
的析構函數在情況1中調用,但在情況2中調用時,執行從fn()
返回到main
。我不明白這個區別,因爲當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;
}
你有兩種情況1,情況2在代碼中,令人困惑... – billz
當你按值返回時,你必須構造一個值來返回。 –
@billz我認爲每個案例都涉及到評論對中的另一行。 –