默认构造函数和拷贝构造函数
生活随笔
收集整理的這篇文章主要介紹了
默认构造函数和拷贝构造函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
構造函數
構造函數包括默認構造函數、拷貝構造函數和一般構造函數。 在編程時,如果程序員不顯式聲明和定義上述函數,編譯器將自動產生4個public inline的默認函數。- A();? ??? ??? ??? ??? ??? ? // 默認構造函數
- A(const A&);? ??? ??? ??? ? // 拷貝構造函數
- A& operator=(const A& a)? ? // 拷貝構造函數
- ~A();? ??? ??? ??? ??? ??? ?// 默認析構函數
默認構造函數
當一個類沒有定義構造函數時,編譯器才生成默認構造函數。
當定義類對象沒有提供初始化式時,使用默認構造函數進行初始化。
沒有默認構造函數的類的局限- 具有該類類型成員的類,必須通過構造函數初始化列表進行初始化。
- 該類不能用作動態分配數組(new)的元素類型。
- 使用該類作為元素類型的靜態數組,必須顯式初始化。
- 不適用于沒有提供初始化的容器
? ??默認構造函數的使用
- A test(); ? ? ? ×
- A test; ? ? ? ? √
- A test = A(); ? √?
拷貝構造函數
對于一個類X,如果一個構造函數的第一個參數是下列之一:
- X&
- const X&
- volatile X&
- const volatile X&
且沒有其他參數或其他參數都有默認值,那么這個函數是拷貝構造函數。
拷貝構造函數不能由成員函數模版生成.
何時發生拷貝- 手動調用
- 函數返回類對象
- 函數有類類型參數
- 容器初始化
- 當類有指針類型的成員時,簡單拷貝(淺拷貝)將造成兩個不同對象的指針指向同一區域,出現訪問沖突、多次delete等錯誤。
- 大量拷貝構造函數的調用,降低運行效率。
- 顯式定義拷貝構造函數(為指針重新申請內存,并拷貝內存數據 --?深拷貝)
- 禁止拷貝(通過成員函數進行賦值,提高運行效率)
轉載于:https://www.cnblogs.com/TaoyzDream/p/3688331.html
總結
以上是生活随笔為你收集整理的默认构造函数和拷贝构造函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序清单3-1 测试能否对标准输入设置偏
- 下一篇: STL之vetor 排序