在類生成臨時物件時,遇到乙個問題,程式會兩次呼叫析構函式
#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...