關於sizeof 與 複製建構函式

2021-06-11 00:07:31 字數 865 閱讀 7166

來自 劍指offer  名企面試官精講典型程式設計題

sizeof:

1.定義乙個空的型別,裡面沒有任何成員變數和成員函式。對該型別求sizeof,得到的結構式多少?

答:答案是1

2.為什麼不是0?

答:空型別的例項中不包含任何資訊,本來求sizeof應該是0,但是當我們宣告該型別的例項的時候,它必須在記憶體中占有一定的空間,否則無法使用這些例項。至於占用多少記憶體,由編譯器決定。vs中每個空型別的例項占用1位元組的空間。

3.如果在該型別中新增乙個建構函式和析構函式,再對該型別求sizeof,得到的結果又是多少?

4.那如果把析構函式標記為虛函式呢?

答:c++的編譯器一旦發現乙個型別中有虛函式,就會為該型別生成虛函式表,並在該型別的每乙個例項中新增乙個指向虛函式表的指標。在32為的機器上,乙個指標佔4位元組的空間,因此得到4;如果是64位的機器,乙個指標佔8位元組的空間,因此求sizeof得到8.

複製建構函式:

class a

a(a other)

void print()

};int _tmain(int argc,_tchar* argv)

在上述**中,複製建構函式a(a other)傳入的引數是a的乙個例項。由於是傳值引數,我們把形參複製到實參會呼叫複製建構函式。因此如果允許複製建構函式傳值,就會在複製建構函式內呼叫複製建構函式,就會形成無休止的遞迴呼叫從而導致棧溢位。因此c++標準不允許複製建構函式傳值引數,在vs和gcc中都將編譯出錯。要解決這個問題,我們可以把建構函式修改為

a(const a& other),也就是把傳值引數改為常量應用。

關於複製建構函式

也許很多 c 的初學者都知道什麼是建構函式,但是對複製建構函式 copy constructor 卻還很陌生。對於我來說,在寫 的時候能用得上覆制建構函式的機會並不多,不過這並不說明複製建構函式沒什麼用,其實複製建構函式能解決一些我們常常會忽略的問題。為了說明複製建構函式作用,我先說說我們在程式設計...

關於建構函式 複製建構函式與析構函式的總結

建構函式 建構函式的作用 1 建立物件 2 初始化其值 建構函式所具有的的特性 1 建構函式的函式名與類名相同 2 沒有返回值 建構函式的執行順序 1 傳參 2 按照類中成員變數宣告順序,依次構造其成員 3 執行建構函式的函式體 建構函式有兩種過載形式 1 帶有引數的 2 無引數的,即預設建構函式 ...

C 學習 建構函式與複製建構函式

在建構函式的函式頭初始化 includeusing namespace std class rectangle private const int length int width int main void 複製建構函式 預設複製建構函式的機制 includeusing namespace std...