C/C++—— 預設建構函式是否會執行
在我瞭解預設建構函式之前,我一直以為兩點:
1.如果類中我不宣告建構函式,編譯器會自動生成預設建構函式並執行。
2.編譯器自動生成預設建構函式會將類成員初始化。
然而這兩點都是錯的。
首先,看一個例子程式,沒有建構函式,有成員變數。
原始碼:
/*****************************************************************
> File Name: test.cpp
> Author:
> Mail:
> Created Time: 2016年04月06日 星期三 22時06分45秒
*****************************************************************/
#include <iostream>
using namespace std;
class Tree
{
public:
//Tree(){num = 0; p = NULL;}
void get_num(){
cout << "num = " << num << endl;
}
void get_p(){
if(p == NULL)
cout << "p == NULL" << endl;
else
cout << "p != NULL" << endl;
}
private:
int num;
char * p;
};
int main()
{
int n;
cout << "Test default constructor: " << endl;
Tree tree;
cout << "sizeof(tree) = " << sizeof(tree) << endl;
tree.get_num();
tree.get_p();
return 0;
}
執行結果輸出如下:
Test default constructor:
sizeof(tree) = 16
num = 539337088
p == NULL
從執行結果可以看出沒有對成員變數初始化。
下面接著看該程式的gdb除錯過程:
在上圖的除錯資訊中可以看到沒有執行預設建構函式。
再次看上面的例子程式,新增了下面的建構函式。
Tree(){num = 0; p = NULL;}
執行結果輸出為:
Test default constructor:
sizeof(tree) = 16
num = 0
p == NULL
下面接著看該程式的gdb除錯過程:
在上圖的除錯資訊中可以看到執行了建構函式。
結論:
1.如果類中不宣告建構函式,編譯器會自動生成預設建構函式並執行。
2.編譯器自動生成預設建構函式會將類成員初始化。
然而這兩點都是錯的。
只有下面四種情況下才會執行預設建構函式:
1.”帶有Default Constructor”的Member Class Object
2.”帶有Default Constructor”的Base Class
3.”帶有一個Virual Function”的Class
4.”帶有一個virual Base class”的Class
詳細介紹看:深度探索C++物件模型 2.1Default Constructor的建構操作
相關文章
- C/C++——建構函式、複製建構函式和解構函式的執行時刻C++函式
- C++建構函式解構函式的執行過程C++函式
- 【C++】建構函式C++函式
- C++建構函式C++函式
- C++ 建構函式和解構函式C++函式
- C++ 類建構函式和解構函式C++函式
- 深度解讀《深度探索C++物件模型》之預設建構函式C++物件模型函式
- C++複製建構函式C++函式
- c++建構函式詳解C++函式
- C++入門記-建構函式和解構函式C++函式
- [C++]顯示呼叫建構函式和解構函式C++函式
- 【C++】初始化列表建構函式VS普通建構函式C++函式
- c++建構函式詳解薦C++函式
- C++語言之結構體、類、建構函式、拷貝建構函式C++結構體函式
- C++行內函數、函式過載與函式預設引數C++函數函式
- C/C++—— C++中建構函式不能是虛擬函式的原因分析C++函式
- 預設建構函式學習函式
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- C++再議建構函式及複製建構函式深度複製C++函式
- C++型別轉換建構函式C++型別函式
- c++ 的學習 建構函式1C++函式
- C++拷貝建構函式詳解C++函式
- C++ 拷貝建構函式詳解C++函式
- c++學習筆記 -- 建構函式C++筆記函式
- C++基礎建構函式(constructor)C++函式Struct
- C++ Daily 《3》----建構函式可否是虛擬函式C++AI函式
- Java的預設建構函式呼叫Java函式
- C++:建構函式的分類和呼叫C++函式
- C++——建構函式之初始化列表C++函式
- C++複製控制:拷貝建構函式C++函式
- C++建構函式初始化順序C++函式
- c++函式模板和執行機制C++函式
- c/c++ 拷貝控制 建構函式的問題C++函式
- 《高質量C++/C程式設計指南》第9章:類的建構函式、解構函式與賦值函式C++C程式程式設計函式賦值
- c++內建函式物件C++函式物件
- C++解構函式C++函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- 迴圈單連結串列建構函式、解構函式C++實現函式C++