最近看到很多人討論一個問題,頗感興趣,於是在此作個記錄
問題是這樣的:
有類A的定義如下:
好,下面問題來了。注意看區別.
區別1:
void main()
{
A a;
A b=a ;//只拷貝,相當於 A b(a);
}
void main()
{
A a;
A b;
a=b;//先賦值,後拷貝
}
區別2:
void main()
{
A a;
A b=a ;//執行兩次析構函數
}
void main()
{
A a;
A b;
a=b;//執行三次析構函數
}
上面第二種情況會先產生一個臨時對象,它相當於:
void main()
{
A b;
A temp=b;
A a=temp;
}
三個對象,當然要析構三次了