1. 程式人生 > >c++ 入門之深入探討拷貝函式和賦值運算子

c++ 入門之深入探討拷貝函式和賦值運算子

在c++入門之深入探討類的一些行為時,說明了拷貝函式即複製建構函式運用於如下場景:

  • 物件作為函式的引數,以值傳遞的方式傳給函式。 
  • 物件作為函式的返回值,以值的方式從函式返回
  • 使用一個物件給另一個物件初始化

針對上述的三種情況,實際上很多時候,我們都會用到;如果我們採用系統預設的拷貝函式,程式容易發生我們無法掌控的錯誤。通常情況,我們會注意到:我們在定義一個拷貝函式的時候,往往會這麼定義:classname(const  classname& A),為什麼一定要用引用型別傳遞引數呢?如果我們不採用引用型別,採用值傳遞:就陷入了問題的本身:我們試圖定義自己的拷貝函式來解決值傳遞的過程中,呼叫拷貝函式的問題。假如我們的拷貝函式變數是值傳遞,那麼當呼叫這個拷貝函式的時候,由於拷貝函式本身就是值傳遞,便使得再次呼叫拷貝函式,而一旦進行呼叫,又遇到值傳遞.....於是,陷入了死迴圈的過程。所以:拷貝函式一定要採用引用傳遞引數。

關於newdelete:用new生成的變數在堆區,而不是棧區。