C 中類的預設構造函式呼叫的時機

2021-10-10 14:22:35 字數 763 閱讀 5091

當不使用任何初始值定義乙個類的非靜態變數時,會呼叫該類的預設建構函式。

a a;
此時,會呼叫類a的預設建構函式。在《c++中類的合成預設建構函式2-1》中提到,如果類中沒有顯式地定義預設建構函式,則c++編譯器會為其創造乙個合成的預設建構函式,如果類中已經定義了其他格式的建構函式,此時c++編譯器不會再為其合成預設建構函式。所以,如果此時類a的定義為

class a 

};

此時,程式會報錯,報錯資訊為「error c2512: 「a」: 沒有合適的預設建構函式可用」。

當類b含有類a的物件,並且使用類b的預設建構函式時,會呼叫類a的預設建構函式。

class a 

};class b ;

使用類b的預設建構函式來建立該類的物件

b b;
此時,會呼叫類b的合成預設建構函式,並呼叫類a的預設建構函式。因為類a沒有預設建構函式,所以此時程式報錯資訊為「 error c2280: 「b::b(void)」: 嘗試引用已刪除的函式」。

class a 

};class b 

a m_a;

};

此時,類b的建構函式沒有顯式地初始化類a的物件m_a,那麼則需要呼叫類a的預設建構函式來初始化m_a,但是類a沒有定義預設建構函式,因此,程式的報錯資訊為「 error c2512: 「a」: 沒有合適的預設建構函式可用」。

C 中類的預設建構函式

在 c 中類的合成的預設建構函式2 1 和 c 中類的合成的預設建構函式2 2 中提到,如果類中沒有顯式地定義預設建構函式,則c 編譯器會為其創造乙個合成的預設建構函式,如果類中已經定義了其他格式的建構函式,此時c 編譯器不會再為其合成預設建構函式。而定義類時,最好要定義其預設的建構函式。在c 11...

拷貝構造函式呼叫的時機

拷貝函式何時會被呼叫呢?最明顯的就是用乙個類物件初始化另外乙個物件的時候 比如x a x 這句語義上就是先建立x 臨時物件,再呼叫x的拷貝建構函式 初始化 a,這只是語義上的,編譯器完全可能優化掉臨時物件 注意區分初始化和賦值 呼叫assignment operator 第二種情況是函式按值傳引數的...

呼叫拷貝建構函式的時機

在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入 函式體 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 3 乙個物件用於給另外乙個物件進行初始化 常稱為賦值初始化 includeusing namespace std class...