在析構函式與建構函式中使用動態記憶體
1.析構函式的使用
(12.在class中使用動態記憶體變數)析構函式在物件對銷毀時自動呼叫,一般有2種情況(2
)用new分配的物件,用delete顯式析構(3
)分配在棧上的物件,當棧釋放時自動析構
(4)普通情況下析構函式都是空的,因為不必做什麼特別的事情
(13.用valgrind工具檢視記憶體洩漏)什麼情況下用動態記憶體?
需要大塊記憶體,且需要按需靈活的申請和釋放,用棧怕爆、用全域性怕浪費和死板時
(2)在class person中增加乙個int *指標,用於指向乙個int型別元素的記憶體空間(3
)在建構函式中分配動態記憶體(4
)在析構函式中**動態記憶體(5
)將動態記憶體從int變數公升級到int陣列變數
(6)實戰中c++常用的動態記憶體往往是容器vector那些
實際開發中,程式較複雜時,可能會出現記憶體洩漏,可以使用工具檢測
(1)valgrind工具介紹:參考:https://main.cppblog.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
1person.hpp#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
1 #include "person.cppperson.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
使用建構函式與析構函式
在每創造乙個新的物件時,如果需要對其進行初始化一些屬性等,就需要用到建構函式。它是與類同名的方法,但是沒有返回的資料型別。如下 student 類 public class student 如上例,this進行標記,表示this.strname student.strname.表示的是對類的成員變數...
建構函式與析構函式
建構函式 主要作用就是為物件初始化。有一點要說的是,在繼承體系彙總,如果在建構函式中,如果沒有指定基類的建構函式,那麼編譯器會在建構函式開頭加入,基類的預設建構函式,這樣就可以初始化基類物件部分 析構函式 對於析構函式,要說的多點,實際也不太複雜,就是加入了virtual 使其具有了多型性質 inc...
建構函式與析構函式
建構函式 先看看建構函式的呼叫順序規則,只要我們在平時程式設計的時候遵守這種約定,任何關於建構函式的呼叫問題都能解決 建構函式的呼叫順序總是如下 1.基類建構函式。如果有多個基類,則建構函式的呼叫順序是某類在類派生表中出現的順序,而不是它們在成員初始化表中的順序。2.成員類物件建構函式。如果有多個成...