析構函式的呼叫順序

2021-10-04 08:17:30 字數 1692 閱讀 1802

如果是多個物件,呼叫建構函式的次序與呼叫析構函式的次序相反

對於不同作用域和儲存類別的物件,建構函式he析構函式的呼叫順序

全域性物件

//不同作用域和儲存類別的物件建構函式和析構函式的呼叫順序

//在寫這個**時遇到了乙個問題,幾個警告:

/* 我使用的編譯器是visual studio 2019

出現了乙個錯誤: e0167 "const char *" 型別的實參與 "char *" 型別的形參不相容

最後網上搜到了csdn的以為大神的部落格,在專案屬性->c/c++->語言中的符合模式項選擇否

然後解決掉了

還有乙個錯誤,錯誤**是c4996,編譯器警告登記為3級,開啟檢視了一下詳情,貌似是由於strcpy不太安全,有更安全的strcpy_s

於是我搜尋了一下strcpy_s的使用方法,看了一位大神的部落格,我的理解是將strcpy換成strcpy_s即可,但是使用的時候不正確,

標頭檔案和都試了

*/#include

#include

using

namespace std;

class

test

void

seta

(int b)

void

setstr

(char

* s)

intgeta()

void

show()

test

(const test& c)

//複製建構函式

~test()

};test demo1

(100

,"hello");

//定義乙個全域性物件,並且使用建構函式初始化

void

external_function

(char xx)

//外部函式void f(char *xx)也可以

intmain()

輸出的結果:

/*

輸出結果:

hello 建構函式

100 , hello

100 , hello

100 , hello

80 , abc

external_function :

111 建構函式

static 建構函式

90 , 111

0 , static

111 析構函式

external_function :

222 建構函式

90 , 222

10 , static

222 析構函式

external_function :

333 建構函式

90 , 333

20 , static

333 析構函式

abc 析構函式 主函式的物件的析構函式

static 析構函式 靜態物件的析構函式

hello 析構函式 全域性物件的析構函式

*/

關於不同作用域和儲存類別的物件,建構函式和析構函式的呼叫順序

主函式內的物件的析構函式是先被呼叫的,其次是靜態區域性物件,最後是全域性物件

析構函式呼叫順序

設已經有a,b,c,d4個類的定義,程式中a,b,c,d析構函式呼叫順序為?c c voidmain 這道題主要考察的知識點是 全域性變數,靜態區域性變數,區域性變數空間的堆分配和棧分配 解題思路 其中全域性變數和靜態區域性變數時從靜態儲存區中劃分的空間 未初始化為bss,已初始化為資料段 二者的區...

析構函式的呼叫順序

析構函式做最後的 清場工作 一般當派生類物件從記憶體中撤銷時,先呼叫派生類的析構函式,再呼叫基類析構函式 但,若用new建立了臨時物件,在用delete撤銷物件是,系統會只執行基類的析構函式,而不執行派生類的析構函式。如果將基類的析構函式宣告為虛函式,由基類所有派生類的析構函式自動成為虛函式 即使析...

C 析構函式的呼叫順序

如果指標指向基類,但是指標在執行時指向派生類,則該基類必須具有虛擬析構函式,以便破壞派生類。如果沒有虛擬析構函式,則只會執行基類的析構函式。比如 base baseptr baseptr new derived 1 如果沒有新增virtual,也就是沒有虛擬析構函式,看下面 示例 include u...