C++中:預設建構函式、解構函式、拷貝建構函式和賦值函數——轉

來源:互聯網
上載者:User

標籤:拷貝   記憶體釋放   兩種   分配   using   檢查   name   就是   names   

對於一個空類,編譯器預設產生4個成員函數:預設建構函式、解構函式、拷貝建構函式和賦值函數。
1、建構函式:
建構函式是一種特殊的類成員,是當建立一個類的時候,它被調用來對類的資料成員進行初始化和分配記憶體。建構函式的命名必須和類名完全相同,建構函式可以被重載,可以多個,可以帶參數。
  eg:

  class A
  {
  public:
  A(){cout<<"無參建構函式";}
  A(int i){cout<<"帶參建構函式";}
  };
  A();//調用預設建構函式
  A(1);//調用有參建構函式
  建立一個對象就會調用無參建構函式,也就是預設建構函式,有參的建構函式需要自己調用。
2、解構函式
建構函式可以重載,解構函式不能重載,解構函式永遠只有一個,如果沒寫解構函式,c++會自動幫我們寫一個解構函式。
建構函式和解構函式是一對,建構函式用來建立對象,而解構函式是用來撤銷對象。
eg:

#include <iostream>using namespace std;class A{public:A(){cout<<"建構函式被調用了!"<<endl;}~A(){cout<<"解構函式被調用了"<<endl;}};int main(){A a;//調用建構函式和解構函式A *p=new A;//調用建構函式delete p;//調用解構函式return 0;}

3、拷貝建構函式

c++拷貝建構函式(深拷貝、淺拷貝)
4、賦值函數
當一個類的對象向該類的另一個對象賦值的時候,就會用到該函數。
當沒有重載賦值函數,通過預設的賦值函數進行賦值操作。
eg:

#include <iostream>using namespace std;class A{public:A(){cout<<"調用建構函式"<<endl;}A(char s){cout<<s<<"調用建構函式"<<endl;}~A(){cout<<"調用解構函式"<<endl;}};int main(){A a(‘a‘);A b(‘b‘);b=a;//a,b實際存在,再調用賦值函數,將a賦值給bA c(a);//拷貝建構函式return 0;}

拷貝函數和賦值函數的差別:
1、拷貝建構函式是一個對象初始化一塊記憶體地區,這塊記憶體就是新對象的記憶體區,而賦值函數是對於一個已經被初始化的對象進行賦值操作。
2、一般來說在資料成員包含指標對象的時候,需要考慮兩種不同的處理需求:一種是複製指標對象,另一種是引用指標對象。拷貝建構函式大多數情況下是複製,而賦值函數是引用函數。
3、實現不一樣。拷貝建構函式首先是一個建構函式,它調用的時候是通過參數的對象初始化產生一個對象。賦值函數則是把一個新的對象賦值給一個原有的對象,所以如果原來的對象中有記憶體配置要先把記憶體釋放掉,而且還要檢查一下兩個對象是不是同一個對象,如果是,不做任何操作,直接返回。

#include <iostream>using namespace std;class A{public:A(){cout<<"調用建構函式"<<endl;}A(char s){cout<<s<<"調用建構函式"<<endl;}A(const A &other);A & operator = (const A &a);//重載拷貝函數~A(){cout<<"調用解構函式"<<endl;}};A& A::operator =(const A &a){A example;cout<<"調用拷貝函數"<<endl;return example;}int main(){A a(‘a‘);A b(‘b‘);b=a;//a,b實際存在,再調用賦值函數,將a賦值給breturn 0;}

總結:

對象不存在,且用別的對象來初始化,就是調用了建構函式
對象不存在,且用別的對象來初始化,就是拷貝建構函式
對象存在,用別的對象來給它賦值,就是賦值函數
程式結束,每個對象都會調用解構函式

 

參考地址:52132936

C++中:預設建構函式、解構函式、拷貝建構函式和賦值函數——轉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.