c 空構造空析構的益處之一

2022-02-17 05:36:31 字數 840 閱讀 9334

專案開發過程中發現乙個問題,有段**,乙個動態庫的cpp**裡不包含標頭檔案中類的空構造空析構實現,就會出現編譯出的動態庫依賴項少了很多。而新增後則多了好幾個依賴項。下面看例子:

1

##a.h

2class

a5 ~a(){}

6void

f();

7private:8

t1 t1;

9t2 t2;

10};

1112

##a.cpp

13 #include "

a.h"

14void

a::f()

1516

##b.cpp

17 #include "

a.h"

18int

main()

假設**中的t1、t2都是來自t.so檔案。我們的目的是由a.so依賴t.so,而最終的b.cpp生成的可執行檔案僅僅依賴a.so即可。這樣的需求,是專案開發中很常見,動態庫依賴鏈,清晰簡明。但是上面的**卻沒有達到目的,因為a.so並沒有依賴t.so,而b可執行檔案,稱之為b.out吧,b.out卻需要顯式依賴t.so才能編譯通過。為什麼?當我們嘗試把a類的構造和析構寫在a.cpp中時,就達到了b.out依賴a.so,a.so依賴t.so的目的。

估計你也發現原因了。t1,t2的實現和a.cpp無關。即使用到了t1,t2,但是作為動態庫,執行是在被動態呼叫時候才執行的,編譯期t1,t2來自標頭檔案,不用考慮其實現,故而不需要依賴。而建構函式搬到了cpp中後,構造時候需要對t1,t2實現。

而在專案開發中,這樣的情況很常見,**要更複雜。養成在cpp中實現構造和析構的習慣是有必要的。

C 多個物件構造 析構 構造和析構的順序

include 多個物件構造和析構 1 當類中有成員變數是其它類的物件時,首先呼叫成員變數的建構函式,呼叫順序與宣告順序相同 之後呼叫自身類的建構函式 2 析構函式的呼叫順序與對應的構造函式呼叫順序相反 2 類成員中若有const修飾,必須在物件初始化的時候,給const int n 賦值 當類成員...

c 的構造和析構

因為c 比c語言多了類和物件的概念,類是一群類似的功能的抽象描述,物件則是類的例項化。乙個類包含三種訪問控制屬性,由三種訪問控制符所控制,即分別為public private和protected三種資料屬性。每個屬性又都由各自的成員資料和成員函式 行為 組成。private和protected訪問控...

C 中的構造 析構

知識點 建構函式的呼叫規則 重要 系統會對任何乙個類提供3個函式成員函式 預設建構函式 空 預設析構函式 空 預設拷貝建構函式 淺拷貝 1 如果使用者提供了有參構造 將遮蔽 系統的預設建構函式。data ob1 err 2 如果使用者提供了有參構造 不會遮蔽 系統的預設拷貝建構函式。data ob1...