拷貝建構函式的呼叫時機 糾正誤區

2021-09-26 14:04:49 字數 710 閱讀 7368

當用類的乙個物件初始化該類的另乙個物件時

當乙個函式的形參是乙個物件,呼叫函式進行形參與實參結合時(形參是實參的乙份拷貝)

函式的返回值是乙個物件,函式返回時(返回值是乙個新的變數,除非返回引用)

用 = 賦值,呼叫的不一定是賦值過載函式,還可能是拷貝建構函式,如果左值沒有初始化 則呼叫拷貝建構函式,左值再次之前進行了初始化 這次是重新賦值呼叫賦值過載函式

#include

class

test

test

(const test& t)

test&

operator=(

const test& t)};

intmain()

當呼叫函式的時候採用巢狀呼叫時,返回值賦給引數,按理說返回時呼叫一次拷貝建構函式,傳參呼叫一次拷貝建構函式,但是實際上並不是這樣,因為編譯器會進行優化,直接兩部合為一步,只呼叫一次拷貝建構函式

/*

拷貝建構函式總共呼叫 7 次,因為函式的返回值作為了函式引數,編譯器進行了優化,只拷貝構造一次

*/#include

class

test

test

(const test& t)};

test func

(test t)

intmain()

C 拷貝構造函式呼叫時機

class a 傳入乙個字串代表變數的名字 a string n name n a 拷貝建構函式a const a a 過載 運算子 a operator const a a friend ostream operator ostream os,const a a private string na...

C 拷貝建構函式的呼叫時機

include iostream using namespace std class test2 test2 int a test2 int a,int b 有參建構函式 兩個引數 test2 析構函式 test2 const test2 obj void printf void main31 in...

C 拷貝建構函式的呼叫時機

當以拷貝的方式初始化物件時會呼叫拷貝建構函式,這裡需要注意兩個關鍵點,分別是以拷貝的方式和初始化物件 1.初始化物件 初始化物件是指,為物件分配記憶體後第一次向記憶體中填充資料,這個過程會呼叫建構函式,物件被建立後必須立即初始化。也就是說只要建立物件就會呼叫建構函式。2.初始化和賦值的區別 初始化和...