為什麼會兩次呼叫析構函式

2021-04-22 01:41:35 字數 533 閱讀 2772

在類生成臨時物件時,遇到乙個問題,程式會兩次呼叫析構函式

#include 

#include 

using

namespace std;

class stack

;stack::stack(const

char *value)

else

}inline stack::~stack()

void dosth(stack pstk)

int main()

查了一些資料,還不是很清楚,但是經過仔細分析後,發現原來是系統呼叫預設拷貝建構函式的結果。

在返回物件和按值傳遞引數時,要生成臨時物件,生成臨時物件要呼叫預設拷貝建構函式。

通過這個例子更讓我加深了對effective c++的理解。

只要類裡有指標變數就得自己寫拷貝建構函式和賦值函式,但是你確定用不著這些函式時,可以把這些函式做private宣告而不去實現它,這就防止了會有人去呼叫它們,也防止了編譯器去生成它們。

建立程序時,為什麼fork會返回兩次?

為什麼fork會返回兩次?由於在複製時複製了 父程序的 堆疊段,所以兩個程序都停留在fork函式中,等待返回。因此fork函式會返回兩次,一次是在父程序中返回,另一次是在子程序中返回,這兩次的返回值是不一樣的。過程如下圖。fork呼叫的乙個奇妙之處就是它僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不...

為什麼要用虛析構函式

1 問題引出 為什麼要使用虛析構函式?class a 父親 int main 我們知道在delete p 中 delete 操作符,會呼叫物件的析構函式,但是這裡傳入的是父類物件指標,所以delete 此時並不知道應該呼叫哪個析構函式,保險起見則只呼叫父類的析構函式,也就是說如果沒有使用虛析構函式,...

為什麼需要虛析構函式

這樣做是為了當用乙個基類的指標刪除乙個派生類的物件時,派生類的析構函式會被呼叫。class clxbase virtual clxbase virtual void dosomething class clxderived public clxbase clxderived void dosomet...