2 4 析構函式與建構函式中使用動態記憶體

2022-05-04 22:39:08 字數 1785 閱讀 8619

在析構函式與建構函式中使用動態記憶體

1.析構函式的使用

(1

)析構函式在物件對銷毀時自動呼叫,一般有2種情況(2

)用new分配的物件,用delete顯式析構(3

)分配在棧上的物件,當棧釋放時自動析構

(4)普通情況下析構函式都是空的,因為不必做什麼特別的事情

2.在class中使用動態記憶體變數

(1

)什麼情況下用動態記憶體?

需要大塊記憶體,且需要按需靈活的申請和釋放,用棧怕爆、用全域性怕浪費和死板時

(2)在class person中增加乙個int *指標,用於指向乙個int型別元素的記憶體空間(3

)在建構函式中分配動態記憶體(4

)在析構函式中**動態記憶體(5

)將動態記憶體從int變數公升級到int陣列變數

(6)實戰中c++常用的動態記憶體往往是容器vector那些

3.用valgrind工具檢視記憶體洩漏

實際開發中,程式較複雜時,可能會出現記憶體洩漏,可以使用工具檢測

(1)valgrind工具介紹:參考:https://

blog.csdn.net/u012662731/article/details/78652651

(2)安裝:sudo apt-get install valgrind(ubuntu16.04

x64)((

1 #include "

person.hpp"2

3using

namespace

man;45

6int main(void)7

main.cpp

1

#ifndef __person_h__

2#define __person_h__34

5 #include

6using

namespace

std;78

namespace

man9;38

39 } //

end of namespace man

4041

4243

#endif

4445

#pragma once

person.hpp

1 #include "

person.hpp

"2 #include 3

4using

namespace

std;56

7//class的成員函式中可以引用class的成員變數,但是要考慮public和private這些

8void man::person::eat(void)9

1213

void man::person::work(void)14

20else

2124}25

2627

void man::person::sleep(void)28

3435

for (int i = 0; i < 10; i++)

3639

40 cout << this->name << "

sleep

"<

4243

44man::person::person()

4549

50 man::person::person(string

name)

5161

6263 man::person::~person()

64

person.cpp

使用建構函式與析構函式

在每創造乙個新的物件時,如果需要對其進行初始化一些屬性等,就需要用到建構函式。它是與類同名的方法,但是沒有返回的資料型別。如下 student 類 public class student 如上例,this進行標記,表示this.strname student.strname.表示的是對類的成員變數...

建構函式與析構函式

建構函式 主要作用就是為物件初始化。有一點要說的是,在繼承體系彙總,如果在建構函式中,如果沒有指定基類的建構函式,那麼編譯器會在建構函式開頭加入,基類的預設建構函式,這樣就可以初始化基類物件部分 析構函式 對於析構函式,要說的多點,實際也不太複雜,就是加入了virtual 使其具有了多型性質 inc...

建構函式與析構函式

建構函式 先看看建構函式的呼叫順序規則,只要我們在平時程式設計的時候遵守這種約定,任何關於建構函式的呼叫問題都能解決 建構函式的呼叫順序總是如下 1.基類建構函式。如果有多個基類,則建構函式的呼叫順序是某類在類派生表中出現的順序,而不是它們在成員初始化表中的順序。2.成員類物件建構函式。如果有多個成...