讀《C++沉思錄》心得:拷貝構造函數
num= VehicleSurrogate parking_lot[ parking_lot[num++]=
書上是這麼解釋上面這段的:
對於書上的這段解釋,我可以理解它是解釋代碼中的第6行,但是完全不能理解它可以解釋第4行。對於第4行,我的理解是:它調用了拷貝構造函數。之後我就在網上搜索了一下拷貝構造函數的使用,於是得出如下三處使用拷貝構造函數的地方:
而拷貝構造函數三處所使用的地方,都不能說是此時代碼第4句的這種情形。就算是那也只能說第4句它肯定調用了拷貝構造函數,並且它使用的是拷貝構造函數使用情況的第三種情況。但是那個“=”是怎麼回事呢,帶著這種疑惑我決定親自寫代碼測試一下,看能不能發現什麼。
以下為我將《C++沉思錄》中的這段代碼的例子簡易寫下來為了測試的代碼:
//Vehicle.h
1 #include<iostream> Vehicle* copy() = ~ cout<<<< };
//Automobile.h
1 #include<vehicle.h> #include<iostream> Automobile : Vehicle* copy() ~ };
//Automobile.cpp
1 #include cout<<<< Vehicle *Automobile::copy() cout<<<< Automobile(* Automobile::~ cout<<<< }
//VehicleSurrogate.h
1 #include #include<iostream> VehicleSurrogate( Vehicle& VehicleSurrogate( VehicleSurrogate& VehicleSurrogate&=( VehicleSurrogate& ~ Vehicle * };
//VehicleSurrogate.cpp
1 #include VehicleSurrogate::VehicleSurrogate():vp( cout<<<< VehicleSurrogate::VehicleSurrogate( Vehicle &v) vp= cout<<<< VehicleSurrogate::VehicleSurrogate( VehicleSurrogate & v):vp(v.vp?v.vp->copy(): cout<<<< VehicleSurrogate &VehicleSurrogate:: =( VehicleSurrogate & cout<<<< (!=& vp=(v.vp?v.vp->copy(): * VehicleSurrogate::~ cout<<<< }
1 #include <iostream> #include #include #include num= VehicleSurrogate parking_lot[ parking_lot[num++]= }
通過對上面代碼的運行,得出運行結果如下圖1:
由運行結果的第5,6,7,8行可以看出,在調用“
而將上面這句“parking_lot[num++]=x”換為“parking_lot[num++]=VehicleSurrogate(x)”時,執行的效果是一樣的,見下圖2: