C 中的拷貝建構函式

2021-06-22 05:21:05 字數 813 閱讀 5642

在c++中,下面三種物件需要呼叫拷貝建構函式:

1) 乙個物件以值傳遞的方式傳入函式體;

2) 乙個物件以值傳遞的方式從函式返回

3) 乙個物件需要通過另外乙個物件進行初始化

注意:1.如果不主動編寫拷貝建構函式和賦值函式,

編譯器將以「位拷貝」的方式自動生成預設的函式。

2.類中有指標型別的資料成員事就要呼叫自己寫的拷貝構造函數 避免指標所指向的記憶體被釋放兩次(即:當含有指標時,如果呼叫預設的拷貝拷貝建構函式(賦值運算子),這個時候進行的淺拷貝(賦值),或者是影子拷貝,會使2個指標指向同乙個記憶體區域,析構的時候就會出現同乙個記憶體資源被釋放2次的錯誤。

物件存在資源但複製過程並未複製資源的情況視為淺拷貝。)

3.如果物件有動態分配的記憶體,一般來說要麼自定義拷貝建構函式進行深拷貝,要麼就禁用拷貝建構函式

3.如果自定義了複製操作符:=,那麼必須自定義拷貝建構函式

當我們沒有自定義拷貝函式的時候,有錯誤。

// 2014525_4.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include using namespace std;

//#include class string

~string()

~string()

{ cout << "~string()" <

參考:

C 中拷貝建構函式

拷貝建構函式主要需要考慮兩個問題 乙個是什麼時候會呼叫拷貝建構函式,另乙個是拷貝建構函式中的淺拷貝和深拷貝 問題1 1 物件在建立時使用其他的物件初始化 cstudent b a 此時複製建構函式被用來建立例項b cstudent c a 此時複製建構函式被用來在定義例項p時初始化c 2 物件作為函...

C 中的拷貝建構函式

今天在學習c 時看到了這樣一句話 就好奇為什麼我們需要自己定義拷貝建構函式,以及 當我們自己定義拷貝建構函式後,成員變數的逐個拷貝 功能失效如何理解?1 如果類只包含類型別成員和內建型別的成員,則可以不用顯示定義複製建構函式。但如果類中包含有指標或者有分配其他型別資源時就必須重新定義複製建構函式。因...

C 中的拷貝建構函式

一 拷貝建構函式 格式 a const a a 總結 系統為物件b分配了記憶體並完成了與物件testa的複製過程,就類物件而言,相同型別的類物件是通過拷貝建構函式來完成整個複製過程的。1.拷貝建構函式的使用 a testa a b testa 2.析構的先後順序 程式結束,析構的時候,先析構了b,後...