比較顯式呼叫建構函式和析構函式

2021-06-23 05:39:41 字數 3091 閱讀 9015

1.首先看如下的**,顯式呼叫析構函式:

c++ code  1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

#include

using

namespace std;

class myclass

~myclass()

void display()

private:

int n_;

};

int main (

void)

輸出為:

constructors

destructors

destructors

證實了一些說法:

new的時候,其實做了兩件事,

一是:呼叫malloc分配所需記憶體(實際上是呼叫operator new),二是:呼叫建構函式。

delete的時候,也是做了兩件事,

一是:呼叫析造函式,二是:呼叫free釋放記憶體(實際上是呼叫operator delete)。

這裡只是為了演示,正常情況下析構函式只會被呼叫一次,如果被呼叫兩次,而析構函式內有delete的操作,會導致記憶體釋放兩次的錯誤。

2. 接著再看:顯式呼叫建構函式(第一種方式):

c++ code  1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

#include

using

namespace std;

class myclass

~myclass()

void display()

private:

int n_;

};

int main (

void)

輸出為:

constructors

n=1

3.顯示呼叫建構函式(第二種方式):placement new 

c++ code  1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#include

using

namespace std;

class myclass

~myclass()

void display()

private:

int n_;

};

int main (

void)

constructors

n=1destructors

placement 

new的作用就是:建立物件(呼叫該類的建構函式)但是不分配記憶體,而是在已有的記憶體塊上面建立物件。用於需要反覆建立並刪除的物件上,可以降低分配釋放記憶體的效能消耗。

比較顯式呼叫建構函式和析構函式

1.首先看如下的 顯式呼叫析構函式 c code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 include using namespace std class myclass my...

顯式呼叫建構函式和析構函式

今天跟同事聊天,他說到stl 原始碼有用到顯示呼叫析構函式。試一了一下。果然能行。include iostream using namespace std class myclass myclass int tmain intargc,tchar argv 結果 constructors destr...

顯式呼叫建構函式和析構函式

stl 原始碼中有用到顯示呼叫析構函式。試一了一下。果然能行。include iostream using namespace std class myclass myclass int tmain intargc,tchar argv 結果 constructors destructors 這個是...